Conheça o assassino arduino: esp8266

Wi-Fi é um pouco essencial do kit para qualquer Internet of Things (Internet das coisas) projetos de DIY, mas o nosso Arduino favorito não vem com Wi-Fi, e adicionando um escudo Wi-Fi pode trazer o custo total para cerca de US $ 40. E se eu lhe disse que um há um conselho dev Arduino compatível com built-in Wi-Fi para menos de US $ 10? Bem, não é.

Video: Conheça o ESP8266 e sua automação residencial nunca mais será a mesma. [Início do curso]

Conheça o assassino Arduino: esp8266. Foi apenas uma questão de tempo antes que a coroa foi roubado da cabeça brilhante do nosso querido placa de desenvolvimento Arduino. É possível se apaixonar por uma placa de circuito?

nomes cativantes lado, o ESP8266 (também conhecido como nodemcu) foi originalmente comercializado como um baixo custo Wi-Fi add-on para placas Arduino, até que a comunidade hacker percebeu que poderia cortar o Arduino fora da equação inteiramente.

Em menos de um ano, o ESP8266 disparou em popularidade, e é agora tão bem apoiado e desenvolvido que se você estiver usando Arduino, você precisa se levantar e tomar nota. Compre um agora, então seguir junto com este guia para começar a programar o seu ESP8266 - tudo a partir de dentro o familiar Arduino IDE.

Você não está limitado a usar o Arduino IDE é claro - eles são compatíveis com Lua também (que parece um emagreceu píton aos meus olhos inexperientes), mas uma vez que estamos abordando este a partir da perspectiva de nós aqueles que aprenderam em Arduino, que é o que vai nos cobrir exclusivamente hoje.

Há muito poucos modelos de ESP8266 volta agora, mas eu estou indo para ir em frente e recomendar este: ESP-12E (também conhecido como nodemcu 1.0, ou é mais novo irmão nodemcu 2.0).

É um pouco mais caro do que os outros (US $ 6,50 comparado com $ 4!), Mas inclui o controlador de série necessário para programar o chip, e tem um regulador de energia integrado, bem como lotes de IO pinos. É amplamente apoiado e realmente não precisa de nada além de uma conexão USB para programação ou poder, por isso é o mais fácil de trabalhar. Se você comprar qualquer outro tipo de placa ESP8266, você pode precisar de um regulador de energia 3.3v separado, e uma conexão FTDI adequado para programação.

Introdução ao ESP8266-12E e Arduino

Primeiro, instale os drivers de série para esta placa. Pode ser necessário desactivar a assinatura kext se você estiver executando El Capitan devido a novos sistemas de segurança.

Em seguida, é preciso ativar o suporte para ESP8266 de gerente de bordo do Arduino IDE. Abra Preferências e insira a seguinte URL onde diz URLs adicionais do Conselho de Administração do gerente:

http://arduino.esp8266.com/package_esp8266com_index.json

arduino URLS gerente bordo

Bata Ok, em seguida, abra o Conselhos Gestor a partir de Ferramentas -gt; Borda menus, procurar esp8266 e instalar a plataforma. Você deve ver agora uma escolha para nodemcu 1.0.

selecione bordo

Deixe a CPU e velocidade de upload como é, e selecione a porta serial recém-instalar. No Mac, este aparece como cu.SLAB_USBtoUART.

Como primeiro programa, eu sugiro o scanner simples Wi-Fi - encontrá-lo a partir de Arquivo -gt; Exemplos -gt; ESP8266WiFi -gt; WifiScan. Note que é muito lento para carregar, mas eventualmente ele vai dizer “Done uploading” e nesse ponto (não antes, ou você vai quebrar o processo de upload), você pode abrir o monitor de série. Você deverá ver algo semelhante a isto:

wi-fi esp8266 teste de digitalização
Sucesso! Agora, vamos tentar conectar a um.

Aqui está um código de barebones absolutamente simples para se conectar a uma rede Wi-Fi. Ele não faz outra coisa senão basta ligar, mas é algo que você pode adicionar muito mais tarde. Basta lembrar de mudar o YOUR_SSID e your_password aos seus dados Wi-Fi. Carregar, abrir a consola de série e você deve vê-lo conectando.

#includeconst char * = SSID "YOUR_SSID"-const de char * palavra-passe = "SUA SENHA"-WiFiClient configuração wifiClient-void () {Serial.begin (115200) -Serial.print ("Conectando à ") -Serial.println (SSID) -WiFi.begin (SSID, senha) -enquanto (WiFi.status ()! = WL_CONNECTED) {atraso (500) -Serial.print (".") -} Serial.println ("") -Serial.println ("WiFi ligado") -Serial.println ("Endereço de IP: ") -Serial.println (WiFi.localIP ()) -} void loop () {}

Não é grande como ridiculamente simples que foi?

Antes de continuar, aqui está o diagrama de pinagem - pode vir a calhar mais tarde. Note que os números de pinos referidas no código são os números GPIO, não o D0-16 provavelmente escrito em seu PCB bordo. Se você absolutamente, positivamente não pode descobrir por que um sensor não está funcionando, você já deve ter misturado os números pin up.

NodeMCU__v1.0_pinout

Breve Smart Sensor casa com MQTT e DHT11

Aqui está um exemplo prático que você pode colocar em uso imediatamente para monitorar sua casa. Nós estaremos adicionando um sensor de temperatura e umidade DHT11, em seguida, relatar os valores usando o protocolo MQTT através da rede Wi-Fi, no meu caso a um sistema de automação residencial OpenHAB DIY (se não, você pode querer ler o nosso guia para iniciantes ficando OpenHAB instalado e funcionando em um Raspberry Pi, e a parte 2, que trata especificamente a instalação de um servidor MQTT).Introdução ao OpenHAB Home Automation em Raspberry PiIntrodução ao OpenHAB Home Automation em Raspberry PiOpenHAB é uma plataforma madura, open source domótica que é executado em uma variedade de hardware e é um protocolo agnóstico, o que significa que pode se conectar a praticamente qualquer hardware de automação residencial no mercado hoje.consulte Mais informação

Do lado da fiação, conecte o sensor de DHT para GND, 3.3v, e ~ D4 (Ou GPIO 2). Isso é tudo o que precisamos para agora.

Faça o download destas bibliotecas MQTT e DHT. Mesmo se você já tê-los, baixar esses queridos de qualquer maneira, backup que você tem, e substituir com estes. A mais recente biblioteca DHT11 de Adafruit usa um algoritmo automático para determinar a velocidade na qual os dados são lidos a partir do sensor, mas é buggy esp8266 e 90% dos resultados de tempo em leituras falhadas.

Com a velha versão 1.0 da biblioteca que eu incluído no download, você pode alterar manualmente o tempo: 11 funciona melhor para estes ESP2866 placas. Eu também passou por muitas cópias da biblioteca MQTT tentando encontrar um bom ligue de volta função, finalmente desembarque por um incluídos. Você precisará reiniciar o Arduino IDE depois de substituir estes.

Aqui está o código completo para o projeto. No topo estão todas as variáveis ​​que você precisa para mudar, incluindo detalhes de Wi-Fi, servidor MQTT (a URL pode ser usada em vez se estiver usando um servidor de nuvem, embora não há nenhuma autenticação no lugar), e os canais de publicar dados sobre.

/ * + ESP8266 MQTT Humidade e Nó de temperatura
* Também é possível receber commands- ajustar messageReceived function ()
* Veja MakeUseOf.com para guia e instruções compilação completa
* Autor: James Bruce de 2015
* /
#incluir
#incluir
#incluir
const char * = SSID "YOUR_SSID"-
const char * palavra-passe = "SUA SENHA!"-
char * = subscribeTopic "openhab / parentsbedroom / entrante"- // subscrever este topic- qualquer coisa enviada aqui será passado para a função messageReceived
char * = tempTopic "openhab / parentsbedroom / temperatura"- // tópico para publicar temperaturas leituras para
char * = humidityTopic "openhab / parentsbedroom / humidade"- // publicar leituras de umidade
const char * server = "192.168.1.99"- // servidor ou URL de MQTT corretor
Corda clientName = "quarto dos pais-"- // apenas um nome usado para falar com MQTT corretor
longo intervalo = 60000- // (ms) - 60 segundos entre relatórios
unsigned resetPeriod longa = 86400000- // 1 dia - este é o período após o qual nós reiniciar a CPU, para lidar com erros de vazamento de memória estranho
#define DHTTYPE DHT11 // DHT11 ou DHT22
#define DHTPIN dois
prevTime- longo sem sinal
DHT DHT (DHTPIN, DHTTYPE, 11) -
Float.h, t-
WiFiClient wifiClient-
MQTTClient client-
Corda macToStr (uint8_t const * mac)
{
result- corda
para (int i = 0- i lt; 6- ++ i) {
resultado + = Cadeia (mac [i], 16) -
se eu lt; 5)
resultado + = `:` -
}
voltar result-
}
void setup () {
Serial.begin (115200) -
dht.begin () -
client.begin (servidor, wifiClient) -
Serial.print ("Conectando à ") -
Serial.println (SSID) -
WiFi.begin (SSID, senha) -
while (WiFi.status ()! = WL_CONNECTED) {
delay (500) -
Serial.print (".") -
}
Serial.println ("") -
Serial.println ("WiFi ligado") -
Serial.println ("Endereço de IP: ") -
Serial.println (WiFi.localIP ()) -
// Gerar nome do cliente com base no endereço MAC e últimos 8 bits de contador de microssegundo
uint8_t mac [6] -
WiFi.macAddress (mac) -
clientName + = macToStr (Mac) -
clientName + = "-"-
clientName + = String (micros () & 0xFF, 16) -
Serial.print ("Conectando à ") -
Serial.print (servidor) -
Serial.print (" Como ") -
Serial.println (clientName) -
se (client.connect ((char *) clientName.c_str ())) {
Serial.println ("Conectado a MQTT corretor") -
Serial.print ("Subscrito: ") -
Serial.println (subscribeTopic) -
client.subscribe (subscribeTopic) -
}
outro {
Serial.println ("MQTT falha de ligação") -
Serial.println ("Irá redefinir e tentar novamente ...") -
abortar()-
}
prevTime = 0-
}
void loop () {
contador static int = 0-
if (intervalo prevTime + lt; millis () || prevTime == 0) {
prevTime = millis () -
Serial.println ("verificar novamente") -
Serial.println (prevTime) -
h = dht.readHumidity () -
t = dht.readTemperature () -
h = h * 1.23-
t = t * 1.1-
// Verifique se algum lê falhou e saída precoce (tentar novamente).
se (isnan (h) || isnan (t)) {
Serial.println ("Falha ao ler a partir do sensor DHT!") -
}
else if (! client.connected ()) {
Serial.println ("Ligação para intermediar repetindo perdido-") -
}
outro{
char * TPayload = F2S (t, 0) -
char * hPayload = F2S (H, 0) -
Serial.println (t) -
Serial.println (h) -
Serial.println (TPayload) -
Serial.println (hPayload) -
client.publish (tempTopic, TPayload) -
client.publish (humidityTopic, hPayload) -
Serial.println ("dados ambientais publicadas") -
}
}
client.loop () -
// redefinir após um dia para evitar vazamentos de memória
se (Millis () gt; resetPeriod) {
ESP.restart () -
}
}
/ * Float para cordas
* F é a bóia para se transformar em uma corda
* P é a precisão (número de casas decimais)
* Retornar uma representação de string do float.
* /
char * F2S (flutuador f, int p) {
char * pBuff- // usar para lembrar que parte do tampão a ser usado para dtostrf
const int iSize = 10- // número de memórias intermédias, uma para cada flutuador antes de envolver em torno
static char sBuff [iSize] [20] - // espaço para 20 caracteres, incluindo o terminador NULL para cada flutuador
static int = iCount 0- // manter um guia do próximo lugar na sBuff de usar
pBuff = sBuff [iCount] - // usar este tampão
if (iCount gt; = iSize -1) {// vá para o envoltório
iCount = 0- // se envolver começar de novo e repor
}
outro{
iCount ++ - // antecedência no balcão
}
voltar dtostrf (f, 0, p, pBuff) - // chamando a função de biblioteca
}
messageReceived anular (tópico String, String carga útil, bytes char *, comprimento unsigned int) {
Serial.print ("entrada: ") -
Serial.print (tópico) -
Serial.print (" - ") -
Serial.print (payload) -
Serial.println () -
}
visualizar rawesp8266_mqtt_humtemphosted com ❤ por GitHub

Veja como ele funciona e algumas notas:

Video: CONTROLE DE SERVOS POR WIFI COM ESP8266 | Curso de Arduino #103

  • Primeiro vamos conectar à rede Wi-Fi, em seguida, para o servidor MQTT, em seguida, começar a principal ciclo ().
  • No loop, nós sondar o DHT sensor a cada 60 segundos e publicar leituras aos canais MQTT relevantes. Novamente, se você encontrar a maioria das leituras resulta em uma mensagem de falha, você tem a versão errada da biblioteca DHT - downgrade para v1.0.
  • client.loop () passes controlar a biblioteca MQTT, permitindo-lhe reagir a mensagens recebidas.
  • Há um mensagem recebida() função onde lidamos com as mensagens recebidas - basta fazer uma simples instrução if para comparar a carga com a mensagem que você está esperando. Você poderia usar isso para ativar um relé, por exemplo.
  • Depois de executar estes por alguns dias, eu achei que iria parar aleatoriamente trabalhando - Suponho que isso é algum tipo de vazamento de memória, mas dado que não tenho a habilidade de codificação para lidar com isso e que poderia ser com as bibliotecas do núcleo, I `ve optou por um soft reset simples todos os dias. Exatamente um dia após os nós sensores são ativado pela primeira vez, eles vão reiniciar-se.
  • Ao ligar estes módulos DHT11 baratos a partir 3.3v, os valores de umidade são muito menores do que deveriam ser. Eu resolvi isso com uma simples multiplicação, e calibrado contra um sensor comercial. Eu aconselho que você confirme contra a sua própria fonte conhecida também, antes de confiar nas leituras. Alternativamente, poder-los com 5V - mas você deve colocar um shifter nível lógico 5V-3.3v entre o pino de dados eo esp8266, ou você irá danificá-lo.

Se tudo correu bem, você agora deve estar recebendo as leituras dos sensores em seu corretor MQTT, e pode ir em frente com a conexão destes para OpenHAB conforme detalhado na parte 2 do guia do nosso novato, onde eu também mostrou como representar graficamente os dados.Guia do OpenHAB Beginner Parte 2: ZWave, MQTT, regras e traçarGuia do OpenHAB Beginner Parte 2: ZWave, MQTT, regras e traçarOpenHAB, o software de automação residencial open source, excede em muito as capacidades de outros sistemas de automação residencial no mercado - mas não é fácil de se configurar. Na verdade, ele pode ser francamente frustrante.consulte Mais informação

humdity gráfico de openhab

Farewell Arduino, nós amamos-te assim. Brincadeirinha: não em todos os lugares em minha casa ainda pode obter Wi-Fi, então para aqueles pontos que ainda vai precisar de uma rede de malha com Arduino e receptores de RF. Mas o que você vai fazer com ESP8266? Quaisquer projetos usando ESP8266 você gostaria de ver escrito acima em MakeUseOf? Deixe-nos saber nos comentários!


Artigos relacionados