O Raspberry Pi ganhou imensa popularidade em todo o mundo. No entanto, muitos dos desenvolvedores amadores enfrentam o problema de acessar o dispositivo pela Internet. Como regra, você deve conjurar com DDNS ou comprar um endereço IP estático. Ambas as opções envolvem a configuração de um roteador, que não é para todos e nem sempre está disponível. Além disso - a abertura do acesso direto ao dispositivo pela Internet acarreta certos riscos de segurança.
Uma maneira extremamente comum de resolver esse problema é usar um servidor intermediário através do qual o servidor e o cliente se conectam.
O esquema é extremamente usado em vários pacotes de acesso remoto: VNCViewer, AmmyyAdmin, etc.
Opção 1-DDNS
Opção 2 - Endereço IP estático
Opção 3 - usando um servidor intermediário
Esse esquema de conexão pode ser implementado através do protocolo MQTT sobre Websockets, mas foi interessante para mim implementar algo muito mais simples, orientado a JSON, extensível, sem restrições de protocolo no tamanho da mensagem e com um modelo de segurança mais óbvio.
A escolha do protocolo foi óbvia. O WebSocket é suportado por navegadores e pela maioria das plataformas e linguagens de programação.
O modelo de barramento de dados é trivial:
O WebSocket Server suporta um número ilimitado de canais. Cada canal pode ser aberto ou protegido por senha. Um canal existe apenas enquanto tiver pelo menos um cliente conectado. Nenhum dado é fundamentalmente armazenado no servidor. A senha é definida pelo primeiro cliente que se conecta ao canal. Clientes sem senha / com senha incorreta não serão permitidos no canal.
Um canal é um contêiner para mensagens. As mensagens são de três tipos: mensagens de endereço (comandos), destinadas a um ou vários destinatários, mensagens de resposta e mensagens de difusão que serão recebidas por todos os clientes conectados ao canal.

Esse esquema permite o uso de hubs comuns para muitos consumidores com relativa segurança, pois não há necessidade de configurações, geração de usuário no servidor (como no MQTT), geração de chaves de acesso etc.
As mensagens não são salvas em nenhum lugar, não são registradas e transmitidas pelo protocolo seguro wss.
As mensagens são objetos JSON digitados. As informações binárias são transmitidas como uma sequência codificada em Base64.
O código do projeto está disponível no
GitHub e o hub atual que você pode encontrar
aqui .
O projeto consiste em um servidor WebSocket no .net, um aplicativo cliente da Web que se conecta ao servidor e um aplicativo python para o raspberry pi.
Um aplicativo Web está longe de ser a única maneira possível de interagir com um servidor WebSocket. Por exemplo, você pode escrever facilmente um cliente em nuvem que "escutará" os eventos da webcam e salvará fotos em algum tipo de armazenamento na nuvem.
A arquitetura permite conectar um número ilimitado de raspberry pi e clientes por canal.
Por exemplo, se você deseja criar algum tipo de sistema de segurança / controle climático / sistema doméstico inteligente, pode colocar todo o framboesa em um canal e enviar comandos para todos ou alguns casos ao mesmo tempo.
Eventos de transmissão "transmissão" receberão todos os participantes da rede.
Algumas palavras sobre os recursos do aplicativo
- Acesso remoto ao sistema de arquivos. Você pode assistir, baixar e enviar fotos, arquivos de som e outros arquivos. É bastante conveniente não carregar todo o arquivo de fotos com vários terabytes no seu telefone. Bem, ou se você precisar procurar algo nos arquivos.
- O PiCamera permite que você receba uma imagem sob demanda e no modo de webcam. Além de receber o som de um microfone, ele pode ser usado como uma solução de segurança barata. Requer uma câmera pi conectada.
- Envie gravações de som para framboesa ou receba gravações de um microfone. Pode ser usado tanto para algumas tarefas de segurança quanto para interação de voz com gatos ou crianças. Requer conexão com uma TV / alto-falante e microfone, respectivamente.
- Ligue / desligue / obtenha o foco da TV. O protocolo CEC permite controlar sua TV via cabo HDMI. Você deve instalar o cec-client no raspberry.
- Exiba informações de áudio e texto na TV. Esse recurso inclui ligar e receber o foco na TV e exibir uma mensagem de texto, acompanhada por um sinal sonoro. É conveniente se você precisar forçar remotamente as crianças a fazer a lição de casa.
- Exibição de imagem remota. Se você quer surpreender sua família e exibir repentinamente uma foto de suas aventuras em uma TV familiar, essa função é apenas para isso. Selecione qualquer imagem do seu PC ou telefone e envie para framboesa.
- Obtenção de dados de umidade, temperatura. Framboesa envia uma mensagem de transmissão com uma periodicidade especificada. Além de umidade e temperatura, a mensagem contém informações sobre temperatura e carga do processador, carregamento de disco e memória. Juntos, o controle da porta de E / S remota pode ser usado como um controle remoto do clima interno. É necessário um sensor de temperatura DHT11 (US $ 1) para medir a temperatura.
- Gerenciar portas de E / S Ele permite ler informações das portas GPIO selecionadas e emitir um sinal para elas. Você pode obter o status de interruptores, lâmpadas, campainhas e, através do relé, controlar alguns dispositivos mais sérios.
- O início remoto de comandos permite executar qualquer comando do shell no raspberry. Por exemplo, comece a visualizar um álbum de fotos ou filme. Se essa oportunidade lhe parecer insegura, essa função poderá ser desativada.

Para continuar ...