Cumplir con el asesino arduino: esp8266
Wi-Fi es un poco esencial del kit para cualquier Internet de las Cosas (IOT) proyectos de bricolaje, pero nuestro Arduino favorito no viene con Wi-Fi, y la adición de un escudo de Wi-Fi puede llevar el costo total de alrededor de $ 40. Lo que si te dijera que hay una una junta dev compatible con Arduino con una función de Wi-Fi para menos de $ 10? Bueno, la hay.
Cumplir con el asesino de Arduino: ESP8266. Era sólo cuestión de tiempo antes de que la corona fue robada de la cabeza brillante de nuestro querido placa de desarrollo Arduino. ¿Es posible enamorarse de una placa de circuito?
nombres pegadizos lado, la ESP8266 (también conocido como NodeMCU) se comercializó como un bajo costo de Wi-Fi complemento de la placa Arduino, hasta que la comunidad hacker se dio cuenta de que se podía cortar el Arduino fuera de la ecuación por completo.
Vídeo: Arduino IDE esp8266 подключение и прошивка
En menos de un año, el ESP8266 se ha disparado en popularidad, y ahora está tan bien apoyado y desarrollado que si usted está usando actualmente Arduino, tiene que ponerse de pie y tomar nota. Comprar uno ahora, a continuación, seguir con esta guía para empezar la programación de su ESP8266 - todo desde dentro del IDE de Arduino familiar.
Usted no está limitado a usar el IDE de Arduino, por supuesto - que son compatibles con Lua también (que se parece a un adelgazado Pitón a los ojos del principiante), pero ya que estamos frente a este desde la perspectiva de nosotros los que han aprendido en Arduino, eso es lo que vamos a cubrimos exclusivamente en la actualidad.
Hay un buen número de modelos de ESP8266 alrededor ahora, pero voy a seguir adelante y recomendar éste: ESP-12E (también conocido como NodeMCU 1.0, o no lo más nuevo hermano NodeMCU 2.0).
Es un poco más caro que los otros ($ 6,50 frente a los $ 4!), Sino que incluye el controlador de serie que se necesita para programar el chip, y tiene un regulador de potencia incorporado, así como gran cantidad de pines IO. Es ampliamente apoyada y realmente no necesita nada aparte de una conexión USB para la programación o el poder, por lo que es el más fácil de trabajar. Si usted compra cualquier otro tipo de tablero de ESP8266, puede ser necesario un regulador de potencia de 3,3 V por separado, y una conexión FTDI adecuada para la programación.
Introducción a ESP8266-12E y Arduino
En primer lugar, instale los controladores de serie de este tablero. Puede que tenga que desactivar kext firma si se está ejecutando El Capitán debido a los nuevos sistemas de seguridad.
A continuación, tenemos que activar el soporte de ESP8266 desde el administrador de la junta de la IDE de Arduino. Abre Preferencias y escriba la siguiente dirección URL donde dice URL adicionales Gerente de la Junta:
https://arduino.esp8266.com/package_esp8266com_index.json
Pulse Aceptar, a continuación, abra la Juntas Director de Herramientas -gt; Tablero menú, buscar esp8266 e instalar la plataforma. Ahora debería ver una opción para NodeMCU 1.0.
Deja la CPU y la velocidad de subida como es, y seleccione el puerto serie de nueva instalación. En Mac, esto aparece como cu.SLAB_USBtoUART.
Como primer programa, sugeriría una simple escáner Wi-Fi - encontrar desde Presentar -gt; Ejemplos -gt; -gt ESP8266WiFi; WifiScan. Tenga en cuenta que es bastante lento para cargar, pero con el tiempo va a decir “Hecho de subir” y en ese momento (no antes, o se va a romper el proceso de carga), puede abrir el monitor de serie. Debería ver algo similar a esto:
¡Éxito! Ahora, vamos a tratar de conectar a uno.
Aquí hay un código de barebones absolutamente simple para conectarse a una red Wi-Fi. No hace más que simplemente conectar nada, pero es algo que se puede añadir demasiado tarde. Sólo recuerde que debe cambiar el YOUR_SSID y su_contraseña a sus datos Wi-Fi. Suba, abre la consola de serie y debería ver que la conexión.
Vídeo: upload sensor values to thingSpeak IoT with esp8266 and arduino
#includeconst char * SSID = "YOUR_SSID"Char -const * password = "TU CONTRASEÑA"-WiFiClient configuración wifiClient-void () {Serial.begin (115200) -Serial.print ("Conectado a ") -Serial.println (SSID) -WiFi.begin (SSID, contraseña) -mientras (WiFi.status ()! = WL_CONNECTED) {retardo (500) -Serial.print (".") - Serial.println} ("") -Serial.println ("Wi-Fi conectados") -Serial.println ("Dirección IP: ") -Serial.println (WiFi.localIP ()) -} void loop () {}
No es maravilloso cómo ridículamente simple fue eso?
Antes de seguir adelante, aquí está el diagrama de pines - que podría ser útil más adelante. Tenga en cuenta que los números de los pines que se refiere el código son los números GPIO, no el D0-16 escrito probablemente en su PCB bordo. Si absoluta y positivamente no puede entender por qué un sensor no está funcionando, de lo que has mezclado los números de patas para arriba.
Sensor de Inicio rápido elegante con MQTT y DHT11
He aquí un ejemplo práctico que puede poner a utilizar de inmediato para vigilar su casa. Añadiremos un sensor de temperatura y humedad DHT11, a continuación, informar de los valores utilizando el protocolo MQTT través de la red Wi-Fi, en mi caso a un sistema de automatización del hogar OpenHAB DIY (si no es así, es posible que desee leer nuestra guía para principiantes de conseguir OpenHAB en marcha y funcionando en un Frambuesa Pi, y parte 2, que se ocupa específicamente de la instalación de un servidor MQTT).Introducción a OpenHAB Home Automation en la Raspberry PiIntroducción a OpenHAB Home Automation en la Raspberry PiOpenHAB es una plataforma madura, abierta casa fuente de automatización que se ejecuta en una variedad de hardware y es el protocolo agnóstico, lo que significa que se puede conectar a casi cualquier hardware de automatización del hogar en el mercado hoy en día.Lee mas
En el lado cableado, conecte el sensor a la DHT GND, 3.3v, y ~ D4 (O GPIO 2). Eso es todo lo que necesitamos por ahora.
Descarga estas bibliotecas MQTT y DHT. Incluso si ya los tiene, descargar estos modos, copia de seguridad de lo que tienes, y sobrescribir con estos. La biblioteca más reciente de DHT11 Adafruit utiliza un algoritmo automático para determinar la velocidad a la que se leen los datos del sensor, pero es con errores en ESP8266 y el 90% de los resultados de tiempo en las lecturas fallidas.
Vídeo: NodeMCU (ESP8266) + IDE do Arduino: controlando lâmpada pelo celular ou PC
Con la edad, la versión 1.0 de la biblioteca que he incluido en la descarga, puede cambiar manualmente la sincronización: 11 que funciona mejor para estos ESP2866 juntas. Yo también pasé por muchas copias de la biblioteca MQTT tratando de encontrar uno un buen llamar de vuelta función, finalmente aterrizar en el que se incluye. Tendrá que reiniciar el IDE Arduino después de sustituir estos.
Aquí está el código completo para el proyecto. En la parte superior son todas las variables que hay que cambiar, incluyendo detalles de Wi-Fi, MQTT servidor (una URL puede utilizarse en lugar si se utiliza un servidor de la nube, aunque no hay ninguna autenticación en su lugar), y los canales de publicar datos sobre.
/ * ESP8266 + MQTT Humedad y el Nodo Temperatura |
* También se puede recibir Comandos- ajustar messageReceived función () |
* Ver MakeUseOf.com de guía generación completa e instrucciones |
* Autor: James Bruce, 2015 |
* / |
#incluir |
#incluir |
#incluir |
const char * SSID = "YOUR_SSID"- |
const char * password = "¡TU CONTRASEÑA!"- |
char * = subscribeTopic "openhab / parentsbedroom / entrante"- // suscribirse a este tema- nada enviado aquí se pasa a la función messageReceived |
char * = tempTopic "openhab / parentsbedroom / temperatura"- // tema para publicar temperaturas lecturas a |
char * = humidityTopic "openhab / parentsbedroom / humedad"- // publicar lecturas de humedad |
const char * server = "192.168.1.99"- // servidor o URL de agente MQTT |
Cadena clientName = "recámara de los padres-"- // sólo un nombre usado para referirse al agente MQTT |
largo intervalo = 60000- // (ms) - 60 segundos entre los informes |
sin firmar resetPeriod larga = 86400000- // 1 día - este es el período de tiempo que reiniciamos la CPU, para hacer frente a los errores de pérdida de memoria impar |
#define DHTTYPE DHT11 DHT11 // o DHT22 |
#define DHTPIN 2 |
prevTime- largo sin signo |
DHT DHT (DHTPIN, DHTTYPE, 11) - |
flotador h, t- |
WiFiClient wifiClient- |
MQTTClient cliente- |
Cadena macToStr (uint8_t const * mac) |
{ |
result- cuerdas |
for (int i = 0- i lt; 6- ++ i) { |
resultado + = String (mac [i], 16) - |
si yo lt; 5) |
resultado + = `:` - |
} |
volver result- |
} |
void setup () { |
Serial.begin (115200) - |
dht.begin () - |
client.begin (servidor, wifiClient) - |
Serial.print ("Conectado a ") - |
Serial.println (SSID) - |
WiFi.begin (SSID, contraseña) - |
mientras que (WiFi.status ()! = WL_CONNECTED) { |
retardo (500) - |
Serial.print (".") - |
} |
Serial.println ("") - |
Serial.println ("Wi-Fi conectados") - |
Serial.println ("Dirección IP: ") - |
Serial.println (WiFi.localIP ()) - |
// Generar nombre del cliente basándose en la dirección MAC y últimos 8 bits de contador de microsegundos |
uint8_t mac [6] - |
WiFi.macAddress (Mac) - |
clientName + = macToStr (Mac) - |
clientName + = "-"- |
clientName + = cadena de caracteres (micros () & 0xff, 16) - |
Serial.print ("Conectado a ") - |
Serial.print (servidor) - |
Serial.print (" como ") - |
Serial.println (clientName) - |
si (client.connect ((char *) clientName.c_str ())) { |
Serial.println ("Conectado al corredor MQTT") - |
Serial.print ("Suscrito a: ") - |
Serial.println (subscribeTopic) - |
client.subscribe (subscribeTopic) - |
} |
else { |
Serial.println ("Error al conectar MQTT") - |
Serial.println ("Se restablecerá y vuelve a intentarlo ...") - |
abortar()- |
} |
prevTime = 0- |
} |
void loop () { |
int contador estático = 0- |
si (prevTime + intervalo lt; millis () || prevTime == 0) { |
prevTime = millis () - |
Serial.println ("comprobar de nuevo") - |
Serial.println (prevTime) - |
h = dht.readHumidity () - |
t = dht.readTemperature () - |
h = h * 1.23- |
t = t * 1.1- |
// Comprobar si los hay lecturas fallidas y salida temprana (para volver a intentarlo). |
si (isnan (h) || isnan (t)) { |
Serial.println ("No se pudo leer desde el sensor DHT!") - |
} |
else if (! client.connected ()) { |
Serial.println ("La conexión a volver a intentar mediar perdido-") - |
} |
más{ |
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 ("datos medioambientales publicado") - |
} |
} |
client.loop () - |
// restablecer después de un día para evitar pérdidas de memoria |
si (millis () gt; resetPeriod) { |
ESP.restart () - |
} |
} |
/ * Flotador para cuerdas |
* F es el flotador a convertir en una cadena |
* P es la precisión (número de decimales) |
* Devolver una representación de cadena del flotador. |
* / |
char * f2s (float f, int p) { |
char * pBuff- // utilizar para recordar qué parte del buffer a usar para dtostrf |
const int iSize = 10- // número de memorias intermedias, una para cada flotador antes de envolver alrededor |
static char sBuff [iSize] [20] - // espacio para 20 caracteres incluyendo terminador NULL para cada flotador |
estáticas = Icount int // 0- mantener una ficha del siguiente lugar de utilizar sBuff |
pBuff = sBuff [iCount] - // utilizar este tampón |
si (iCuenta gt; = iSize -1) {// comprobar la envoltura |
iCuenta = 0- // si envolver empezar de nuevo y restablecer |
} |
más{ |
iCuenta ++ - // avance del contador |
} |
volver dtostrf (f, 0, p, pBuff) - // llamar a la función de biblioteca |
} |
messageReceived anular (tema String, String payload, bytes char *, int longitud sin firmar) { |
Serial.print ("entrante: ") - |
Serial.print (tema) - |
Serial.print (" - ") - |
Serial.print (carga útil) - |
Serial.println () - |
} |
He aquí cómo funciona y algunas notas:
Vídeo: ESP8266 WiFi Access Point Examples with the Arduino IDE
- En primer lugar nos conectamos a la red Wi-Fi, a continuación, al servidor MQTT, a continuación, iniciar el principal lazo().
- En el bucle, que sondean el DHT sensor cada 60 segundos y publicar lecturas a los canales MQTT pertinentes. Una vez más, si usted encuentra la mayor parte de las lecturas de los resultados en un mensaje de fallo, usted tiene la versión incorrecta de la biblioteca DHT - rebaja a v1.0.
- client.loop () pasa el control a la biblioteca MQTT, permitiendo que reaccione a los mensajes entrantes.
- Hay una mensaje recibido() función en la que manejamos los mensajes entrantes - acaba de hacer un simple if para comparar la carga útil con el mensaje que está esperando. Usted puede usar esto para activar un relé, por ejemplo.
- Después de ejecutar estos por unos días, encontré que dejarían de trabajar de forma aleatoria - Asumo que esto es algún tipo de pérdida de memoria, pero dado que no tengo la habilidad de codificación que lidiar con eso y podría ser con las bibliotecas del núcleo, lo `ve optado por un simple reinicio suave todos los días. Exactamente un día después de que los nodos sensores se activan en primer lugar, que se reiniciará a sí mismos.
- Cuando la alimentación de estos módulos DHT11 baratos de 3,3 V, los valores de humedad son mucho más bajos de lo que deberían. He resuelto esto con una simple multiplicación, y calibrado frente a un sensor comercial. Le aconsejo que confirmar en contra de su propia fuente conocida también, antes de confiar en las lecturas. Como alternativa, poder ellos con 5V - pero debe colocar una palanca de cambios de nivel lógico 5V-3.3V entre el pin de datos y la ESP8266, o dañará se.
Si todo ha ido bien, ahora debería estar recibiendo lecturas de los sensores en su corredor MQTT, y puede seguir adelante con la conexión de éstos a OpenHAB como se detalla en parte 2 de nuestra guía para principiantes, donde también se mostró cómo graficar los datos.Guía del Principiante OpenHAB Parte 2: Z-Wave, MQTT, Reglas y la CartografíaGuía del Principiante OpenHAB Parte 2: Z-Wave, MQTT, Reglas y la CartografíaOpenHAB, el software de automatización del hogar de código abierto, es muy superior a las capacidades de otros sistemas de automatización del hogar en el mercado - pero no es fácil para ponerse en marcha. De hecho, puede ser francamente frustrante.Lee mas
Arduino de despedida, nos encantó así que te. Es broma: no en todas partes en mi casa puede incluso conseguir Wi-Fi, así que para aquellos puntos que todavía tendrá una red de malla con Arduino y receptores de RF. Pero, ¿qué va a hacer con ESP8266? Cualquier proyecto utilizando ESP8266 que le gustaría ver escrito arriba en MakeUseOf? Háganos saber en los comentarios!