Índice:

Faixa de LED WiFi + Sensor de temperatura com ESP8266: 6 etapas
Faixa de LED WiFi + Sensor de temperatura com ESP8266: 6 etapas

Vídeo: Faixa de LED WiFi + Sensor de temperatura com ESP8266: 6 etapas

Vídeo: Faixa de LED WiFi + Sensor de temperatura com ESP8266: 6 etapas
Vídeo: ESP8266 + DHT11 ou DHT22: Temperatura e umidade no seu celular (Automação Residencial) [ESP8266 #04] 2024, Julho
Anonim
Faixa LED WiFi + Sensor de temperatura com ESP8266
Faixa LED WiFi + Sensor de temperatura com ESP8266

Este tutorial descreve as etapas para configurar um ESP8266 e fazê-lo se comunicar com um sensor de temperatura e faixa de LED, além de ser capaz de receber entrada e enviar saída com MQTT por WiFi. O projeto foi feito para um curso realizado na Cal Poly San Luis Obispo no outono de 2016- CPE 439: Sistemas Embarcados em Tempo Real. O objetivo geral era demonstrar a facilidade de criar uma "coisa" conectada à Internet com hardware barato.

Suprimentos / equipamentos necessários:

  • Placa de desenvolvimento NodeMCU ESP8266
  • WS2812B tira LED
  • MAX31820 Sensor de temperatura
  • Tábua de pão
  • Resistor de 4,7 K ohm
  • Resistor de 220 ohms
  • fios de ligação
  • cabo micro usb
  • PC (ou VM) executando Linux (por exemplo, Ubuntu)

Premissas / pré-requisitos:

  • experiência com o uso de ferramentas de linha de comando e instalação de pacotes em uma distribuição baseada em debian
  • compreensão básica da sintaxe do Makefile
  • conectando fios

Etapa 1: Criação de um ambiente de construção

Para construir o projeto, você precisará do esp-open-sdk instalado em sua máquina. Siga o link e leia as instruções de construção. Resumindo, você estará executando alguns comandos sudo apt-get para instalar dependências, um clone git --recursive para clonar / baixar esp-open-sdk e, finalmente, um comando make para construir esp-open-sdk.

Me veja

Etapa 2: obter o código-fonte, configurar e construir

Agora que o esp-open-sdk foi construído, clone o repositório do projeto.

git clone

Mude para o diretório do projeto, crie uma pasta.local e copie as configurações de exemplo.

cd esp-rtos-tests

mkdir -p.local cp settings.example.mk.local / settings.mk

Agora abra.local / settings.mk com qualquer editor de texto e altere as seguintes configurações:

  • OPENSDK_ROOT: o caminho absoluto para a localização do esp-open-sdk que você construiu na etapa 1
  • WIFI_SSID: O SSID da sua rede WiFi
  • WIFI_PASS: a senha da sua rede WiFi
  • PIXEL_COUNT: O número de pixels em sua faixa de LED WS2812B

Nota: Uma vez que este projeto usa SPI para acionar os LEDs e usa o NodeMCU 3.3v para fornecê-los, você provavelmente não será capaz de acionar mais de ~ 60 LEDs.

Nota: As outras configurações não precisam ser alteradas, mas podem ser, se desejado. Recomenda-se manter a ordem das prioridades das tarefas. Quanto mais baixo for o número da prioridade, menor será a prioridade da tarefa.

Agora construa o projeto:

fazer exemplos -C / cpe439

Se tudo estiver configurado corretamente, ele deve começar a compilar. No final você verá:

Criado com sucesso 'firmware / cpe439.bin'

Me veja

Etapa 3: conectar os componentes de hardware

Conectar componentes de hardware
Conectar componentes de hardware

Agora que o código está compilado, é hora de conectar nossos periféricos.

Primeiro, cole o NodeMCU na placa de ensaio e, em seguida, use os fios de jumper para fazer as conexões conforme mostrado no diagrama.

Algumas coisas a serem observadas:

  1. Importante: A linha de dados WS2812B não é bidirecional. Se você olhar atentamente para as marcações no lado do LED da faixa, verá pequenas setas apontando em uma direção. A saída do D7 do NodeMCU precisa estar indo para o WS2812B da mesma forma que o marcador de direção, que você pode ver no diagrama se olhar de perto.
  2. Dependendo de que tipo de conectores vem com seu WS2812B, você pode precisar fazer algumas modificações para que eles se conectem com segurança na placa de ensaio. Você também pode usar clipes jacaré para conectá-los a cabos de jumper compatíveis com breadboard.
  3. Os pinos do MAX31820 têm um passo menor e são mais finos do que os jumpers padrão de 0,1 "/ 2,54 mm, tornando-os difíceis de conectar. Uma maneira de contornar isso é usar fios de jumper fêmea para macho, retirar a caixa de plástico do lado feminino, em seguida, use um alicate para prender as pontas do jumper fêmea firmemente em torno dos pinos menores do MAX31820.

Verifique novamente as conexões antes de ligar o NodeMCU para não danificar os componentes.

Etapa 4: Flash e executar

Piscando

Com todo o hardware conectado, conecte seu NodeMCU e faça flash com o seguinte comando:

fazer exemplos Flash -C / cpe439 ESPPORT = / dev / ttyUSB0

/ dev / ttyUSB0 é o serial com o NodeMCU deve aparecer. Se você tiver outros dispositivos seriais conectados, ele pode aparecer como / dev / ttyUSB1 ou algum outro número. Para verificar, você pode executar este comando duas vezes, uma com o NodeMCU desconectado e uma vez com ele conectado, e comparar a diferença:

ls / dev / ttyUSB *

Outro problema que você pode encontrar é não ter permissão para acessar o dispositivo. Duas maneiras de corrigir isso são:

  1. Adicione seu usuário ao grupo de discagem:

    sudo adduser $ (whoami) dialout

  2. chmod ou chown o dispositivo:

sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0O primeiro método é o preferido porque é uma solução permanente.

Correndo

Depois de executar o comando flash com sucesso, o dispositivo será inicializado imediatamente e começará a executar o código compilado. A qualquer momento após piscar, você pode executar o seguinte comando para observar a saída serial:

python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q

Para economizar tempo, você pode adicionar isso ao seu arquivo ~ /.bashrc:

alias nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q'

..que permite que você simplesmente digite "nodemcu" como um apelido para esse comando.

Se tudo estiver configurado corretamente, sua faixa de LED deve acender em verde e em serial você deve ver a conexão WiFi, obter um endereço IP, conectar-se ao MQTT e mensagens de que os dados de temperatura estão sendo enviados.

conectado com MyWiFiSSID, canal 1dhcp cliente iniciar … wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, máscara: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueendSkttt_ttaq_tta_vivido_vit_ttaq:: (Re) conectar ao servidor MQTT test.mosquitto.org… xQueueReceive + 25.50xQueueSend ok doneSend MQTT connect… MQTTv311donexQueueReceive +25,56 xQueueSend ok

Etapa 5: Interagindo

Supondo que seu dispositivo tenha se conectado a WiFi e ao corretor MQTT com sucesso, você poderá enviar e receber dados do NodeMCU com MQTT. Se ainda não o fez, instale o pacote de clientes mosquitto:

sudo apt-get install mosquitto-clients

Agora você deve conseguir usar os programas mosquitto_pub e mosquitto_sub do seu shell.

Recebendo atualizações de temperatura

Para receber dados de temperatura, queremos usar o comando mosquitto_sub para assinar o tópico no qual o NodeMCU está publicando.

mosquitto_sub -h test.mosquitto.org -t / cpe439 / temp

Você deve ver os dados de temperatura (em Celsius), chegando ao terminal.

+25.87+25.93+25.68…

Configurando a cor da faixa de LED remotamente

Um formato de mensagem simples é usado para enviar valores RGB para o NodeMCU sobre MQTT. O formato do comando é parecido com este:

r: RRRg: GGGb: BBB ~

Onde RRR, GGG, BBB correspondem aos valores RGB (0-255) da cor que você deseja enviar. Para enviar nosso comando, usaremos o comando mosquitto_pub. aqui estão alguns exemplos:

mosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 255g: 0b: 0 ~' # redmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 0g: 255b: 0 ~ '# greenmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m' r: 0g: 0b: 255 ~ '# azul

Se você quiser ser criativo, encontre um seletor de cores online como este e edite o comando com qualquer valor RGB que você escolher.

Atenção

Os tópicos neste projeto são definidos como / cpe439 / rgb e / cpe439 / temp em um broker MQTT público, o que significa que não há nada que impeça outra pessoa de publicar ou assinar os mesmos tópicos que você. Para experimentar, usar um corretor público é bom, mas para projetos mais sérios, você vai querer se conectar a um corretor com proteção por senha ou executar seu próprio corretor no servidor.

Etapa 6: detalhes de implementação

Onewire

O ESP8266 tem apenas 1 núcleo, portanto, tarefas de bloqueio como esperar 750ms para o sensor de temperatura realizar uma medição de temperatura normalmente resultaria em WiFi não funcionando bem, e talvez até mesmo uma falha. No paradigma FreeRTOS, você chama vTaskDelay () para lidar com essas longas esperas, mas também há muitas esperas mais curtas necessárias entre leituras e gravações que são mais curtas do que o tique do sistema FreeRTOS e, portanto, não podem ser evitadas com vTaskDelay (). Para também contornar isso, o driver onewire neste projeto foi escrito para funcionar fora de uma máquina de estado que é acionada pelo temporizador de hardware do ESP8266, que pode acionar eventos tão baixos quanto a cada 10 microssegundos, que por acaso é o mais curto tempo necessário entre as operações de leitura / gravação onewire. A maioria das outras implementações usa uma chamada de bloqueio para delay_us () ou similar para lidar com isso, mas se você está constantemente fazendo atualizações de temperatura, todos esses atrasos começam a se somar, resultando em um aplicativo menos responsivo. A fonte para esta parte do código está localizada na pasta extras / onewire.

WS2812B

O ESP8266 não tem nenhuma opção de hardware padrão para PWM rápido o suficiente para acionar faixas de LED a 800KHz. Para contornar isso, este projeto usa o pino SPI MOSI para acionar os LEDs. Ajustando a taxa de clock do SPI e alterando a carga útil do SPI, você pode obter um controle bastante confiável de cada LED individual. Este método tem suas falhas - por exemplo, os LEDs devem ser alimentados com uma fonte de 5 V e um deslocador de nível deve ser adicionado à saída do pino SPI. Mas 3.3V funciona. Em segundo lugar, existem falhas que ocorrem devido ao tempo imperfeito usando o método SPI. E o terceiro é que agora você não pode usar o SPI para mais nada. Informações adicionais sobre este método podem ser encontradas aqui, e a fonte para esta parte do código está localizada na pasta extras / ws2812.

Um método mais confiável para acionar fitas de LED é usar i2s. No entanto, esse método tem muitos hacks específicos de chip, então o SPI parecia ser uma escolha melhor como exercício de aprendizado.

Recomendado: