Posso usar um ESP8266 como um broker MQTT?

7

Estou fazendo um projeto de automação residencial com base em topologia em estrela. O que estou tentando conseguir é que um dos nodemcu / ESP8266 atue como um servidor acessível ao mundo externo e outro nodemcu / ESP8266 atue como clientes conectados a relés ou sensores.

Ao receber o comando do servidor, os relés devem ser acionados de acordo e atualizar o status novamente para o servidor. Eu li muitos tutoriais através de métodos diferentes. O MQTT parece bom, mas não quero usar nenhum corretor de terceiros como a Adafruit. Quero hospedar o servidor da web no meu nodemcu ou no meu host. A parte triste é que eu não possuo um Raspberry Pi.

Posso usar um dos meus dispositivos ESP8266 como um broker MQTT ou existe uma alternativa adequada?

Rohit Mathur
fonte
2
Para usar o MQTT, você precisa de um broker e um esp8266 simplesmente não é capaz de agir como um broker. Você precisa de algo "maior"
hardillb
11
Você pode hospedar um corretor MQTT no seu PC / laptop, embora executá-lo em 0/24 possa aumentar um pouco a sua conta de eletricidade.
Bence Kaulics
11
@hardillb -> algo maior significa o próprio raspberry pi? ou Arduino mega também poderia ser utilizado para o mesmo propósito
Rohit Mathur
11
Isso significa que um computador real, então não é um mega Arduino, um Pi Zero seria suficiente
hardillb
11
@BenceKaulics -> posso usar minha hospedagem em vez de deixar meu laptop ligado por toda a vida. Eu tenho uma hospedagem compartilhada.
Rohit Mathur

Respostas:

9

Tecnicamente falando, sim, um ESP8266 poderia atuar como um intermediário MQTT. De fato, alguém já tentou ! No final de seu projeto , eles alegaram ter um broker que pode fazer a ponte para um broker MQTT em nuvem, com uma interface da web e uma quantidade razoável de tempo de atividade. Nos comentários, eles dizem que o código é proprietário, portanto você não poderá usá-lo exatamente, mas serve como prova de conceito se realmente quiser usar um ESP8266.

No entanto, o uso de um ESP8266 como corretor provavelmente será muito trabalhoso . Usar um Pi, como sugerido por MatsK , seria muito mais fácil e, embora as unidades Raspberry Pi sejam um pouco mais caras (entre £ 5 e £ 25 + postagem, dependendo do modelo escolhido), você economizará muito tempo . Com um Pi, você pode apenas usar um corretor estabelecido como o Mosquitto . Em um ESP8266, não há chance de o Mosquitto ser executado, e você provavelmente teria que escrever seu próprio corretor ou usar um bem menos confiável.

Como alternativa, você pode conectar todos os seus ESP8266s diretamente a um serviço de nuvem como o AWS IoT . Isso simplifica sua configuração, mas significa que todas as solicitações são roteadas pela Internet e você não pode controlar os dispositivos localmente. Se sua conexão à Internet for interrompida usando essa abordagem, você também não terá controle sobre os dispositivos.

Aurora0001
fonte
11
Eu recomendaria usar "Node-red" uma interface gráfica da web onde você pode criar lógica para automação.
MatsK
@Aurora - Obrigado por explicar a coisa com tanta profundidade. Isso trouxe clareza ao meu pensamento. Entendo que o Pi é necessário para servidores autônomos. Mas se eu quiser levar isso para a nuvem. É necessário usar serviços de IoT de terceiros? Posso usar meu host para isso? Se não for muito difícil. Tenho apenas 14 anos. Portanto, não tenho muito conhecimento técnico.
Rohit Mathur
@RohitMathur Sim, você pode usar seu próprio host, dependendo do tipo de host que você possui - se for algo como um VPS ou um servidor dedicado, sim; se for apenas um host tradicional para páginas da web, não. Se você compartilhar qual host está usando, posso tentar apontar na direção certa. Leia também O que devo fazer quando alguém responder à minha pergunta? para que você possa recompensar qualquer resposta útil que receber.
Aurora0001
Eu tenho um host compartilhado. Por enquanto, acho que tenho que me comprometer com o Pi. O custo do VPS é alto. Quantos nós podem ser conectados a um Pi como clientes? Como o ESP8266, você pode gerenciar até 4 clientes. Meu projeto pode ser de n não. de nós. Alguns conectados a um relé, outros com sensores.
Rohit Mathur
@RohitMathur Não sei o número exato, mas imagino que um Pi provavelmente possa lidar com centenas de mensagens por segundo, principalmente o Pi 3, que é bastante poderoso. Certamente você não alcançará o limite dos recursos do Pi com seu caso de uso.
Aurora0001
8

Minha sugestão seria um corretor MQTT de mosquito em um Raspberry Pi.

Há um artigo aqui https://tech.scargill.net/a-christmas-script/ em que Peter Scargill criou um script que instala todos os componentes e dependências necessários.

Dê uma olhada no Node-red. Com ele, você pode criar uma lógica para complementar seu projeto.

Atualizações:

Acabei de encontrar um broker ESP8266 MQTT, disponível gratuitamente. Isso eu tenho que tentar ....

https://www.youtube.com/watch?v=0K9q4IuB_oA

https://github.com/martin-ger/esp_mqtt

MatsK
fonte
Sim, acho que preciso comprar um Pi. E este artigo foi realmente útil. Você pode compartilhar mais alguns tutoriais para o meu projeto? Vou passar por eles assim que conseguir um Pi.
Rohit Mathur
Rui Santos tem muitos tutoriais legais, como: randomnerdtutorials.com/… e muitos mais, e seu livro "domótica" é recomendável.
MatsK
Eu tenho seguido um tutorial. randomnerdtutorials.com/… . Raspberry Pi está funcionando absolutamente bem. Mas acredito que esp8266 não está recebendo mensagens. Portanto, não posso controlar o relé conectado com esp8266.
Rohit Mathur 23/09
6

Além das respostas e comentários que recomendam o uso de um Raspberry Pi por causa dos recursos limitados do ESP8266, geralmente faria sentido usar o ESP32 , o sucessor não oficial do ESP8266. Por ser dual-core + 3x mais RAM, ele corrige problemas de conexão WiFi que aumentavam quando o tamanho dos programas do usuário.

Na faixa de preço, é apenas alguns dólares mais caro que o ESP8266 e significativamente mais barato que o do RaspberryPi (pelo menos até que o zero caia no preço). As outras respostas devem ser cobertas pelo lado do software.

Moritz
fonte
5

Além do que as outras excelentes respostas já declararam, o uso de um ESP8266 como seu broker MQTT é menos do que o ideal pelo simples motivo de que não possui os requisitos do sistema para executar a velocidade. Alguém no Github estava tentando uma façanha semelhante, e disseram:

Não é impossível, mas não faz muito sentido. O broker precisa de alguns recursos, como CPU, memória e número de conexões TCP (uma para cada cliente), talvez armazenamento não volátil (para mensagens persistentes), configuração para direitos de acesso do usuário e muitos outros detalhes.

Repito as outras ótimas respostas: compre um Raspberry Pi ou outro computador barato para atuar como seu corretor. O ESP simplesmente não possui as especificações para um bom desempenho.

anonymous2
fonte
11
Sim. É muito claro agora que eu iria precisar de um Pi para realizar este projecto
Rohit Mathur
Esse é principalmente um problema de dimensionamento - ele realmente não aparece até o número de nós aumentar. O problema que está presente desde o início é que o software deve ser reescrito, provavelmente do zero, para criar a funcionalidade do intermediário com o mínimo de recursos.
21417 Chris Stratton
Um MCU maior seria adequado, mas não seria mais barato que um SBC de gama baixa?
Sean Houlihane
3

Existe uma biblioteca compatível com o arduino, agradável e funcional, com um pequeno broker MQTT que roda no ESP8266:

Joern
fonte
Este deve ser uma resposta escolhida)
podarok
2

Você pode usar um ESP8266 como intermediário MQTT. Ele suporta 20 dispositivos, websockets e conexão de ponte a uma instância do MQTT na nuvem que fornece websockets e SSL do MQTT.

Em três minutos, você pode ter um broker MQTT totalmente funcional. Confira a plataforma iotcentral.eu. Faça uma conta e você está pronto.

Dan Catalin Batrinu
fonte
obrigado pela sugestão Dan. Mas agora estou usando o Raspberry Pi como corretor do MQTT. mas agora o problema está no esp8266. Às vezes, ele se conecta ao Wifi, mas às vezes apenas diz "Conectando ................." e os pontos continuam. Eu tentei usar fonte de alimentação externa, assim não está funcionando. Alguma idéia de como fazer isso?
precisa