¿Cómo iniciar la programación de un script en Arduino?
Comenzar un nuevo proyecto en Arduino puede parecer desalentador, pero con un enfoque paso a paso se simplifica mucho. Al iniciar un proyecto en IDE de Arduino, siempre verás las funciones básicas setup() y loop(). Sin embargo, es clave marcar y documentar tu código desde el principio, señalando detalles relevantes como fechas o un sistema de identificación, que ayudan a mantener el control y referencia del proyecto. Aquí, te explicaré cómo comenzar de manera exitosa tu código.
Comentarios y librerías:
Utiliza // para añadir comentarios en Arduino.
Comienza incluyendo las librerías necesarias para tu proyecto. Por ejemplo, para trabajar con redes Wi-Fi y ciertas tarjetas, necesitarás <ESP8266WiFi.h>. Si trabajas con sensores específicos como el DHT22, incluye su librería correspondiente de Adafruit. Esto se hace así:
Para cualquier proyecto, es crucial definir los pines en los que se conectarán los sensores y el tipo de dispositivo que estás utilizando. Esto se realiza en la sección de definiciones:
Definiciones básicas:
Define el pin del sensor, por ejemplo, si el DHT está en el pin D5:
#defineDHTPIND5
Define el tipo de sensor DHT:
#defineDHTTYPEDHT22
Red Wi-Fi:
Define las credenciales de la red a la que se conectará el dispositivo:
La función loop es donde se realiza el ciclo infinito de ejecución, es decir, todo el trabajo persistente o las acciones repetitivas.
Lectura de sensores en el loop:
Usa el loop para leer y procesar los datos de tus sensores:
float h = dht.readHumidity();float t = dht.readTemperature();
Agrega cualquier lógica que necesites para procesar y manejar estos valores, como validaciones o conversiones.
Actualización de datos y comunicación:
Aquí estableces cualquier función de actualización o lógica de control que se ejecute de manera cíclica, como enviar datos a través de API:
if(isnan(h)||isnan(t)){ Serial.println("Failed to read from DHT sensor!");}else{ Serial.print("Humidity: "); Serial.print(h); Serial.print("% Temperature: "); Serial.print(t); Serial.println(" *C ");}
Finalmente, asegúrate de revisar constantemente tu código en busca de errores sintácticos, siendo los puntos y comas y las llaves las áreas más frecuentes de problemas en programación en Arduino. Nunca olvides guardar y verificar el código antes de subirlo, ya que esto ayudará a prevenir errores potenciales durante la carga en el dispositivo. Con estas bases sólidas, estarás listo para dar los primeros pasos en un proyecto IoT con Arduino.
Yo puedo ser avanzado pero por que se omite ¡¿Como instalar la Esp8266 en la ide de Arduino?? o por ejemplo se incluyeron las librerias, pero cuando se descargaron e instalaron?
Este curso a quien esta dirigido a personas, que ya tienen todos estos conocimientos, por que creería que no los tenemos que dejar afuera, saludos IoTicos Team.
Comparto tu opinión, pero esos pasos se explicaron en el curso de Arduino, sin embargo si debió decir el link donde encuentra los ficheros del ESP o que se debía remitir al curso de Arduino
vaya pues lo interesante es que como saber mas de Arduino si este curso esta en lo fundamental, y Arduino esta en lo intermedio referencia a toda la carrera de IoT, algo raro que para llegar a entender un curso previo a Arduino, tengas que saber Arduino, en fin no es la primera vez que me pasa.
Si alguien quiere saber como se instala los drivers de los ESP826 puede ir a este video y seguir los pasos, espero les sirva
(lo dejo a partir del minuto 3:13 que es donde realmente inicia la instalación)
Si también tienen problemas con las librerías pueden descargarlas desde aqui y agregarlas en la ruta
Programa - incluir libreria - Añadir bliblioteca .ZIP
Gracias, Diego! Gran aporte. Elon te bendiga!
Tengo algún conocimiento previo de arduino, pero creo que la persona que llega a este curso, no tiene quizás ese know how, esta clase puede ser bastante liosa para ellos.
Un saludo.
Hola @Diego Alexander Forero Higuera
muchas gracias por tu interés
acá va el código:
//Incluir Librerias en el Proyecto#include <ESP8266WiFi.h>#include <aREST.h>#include <DHT.h>#include <DHT_U.h>#include <Adafruit_Sensor.h>// Definir Puertos#define DHTPIND5#define DHTTYPEDHT11#define MQA0//Inicializar sensoresDHTdht(DHTPIN,DHTTYPE);//Crear API RestaREST rest = a REST();//Definir red Wifi a conectar el dispositivoconst char* ssid ="Nombre de la red";const char* password ="Contraseña de ña red";// Definir puertos#define LISTEN_PORT80//Crear Instancia de ServidorWiFiServerserver(LISTEN_PORT);//Definicion de Variablesfloat mq, humidity, temperature;//Definir lapreparacion del codigo con SETUPvoidsetup(){ serial.begin(9600);// para que lo ssensores lean a la misma velocidad dht.begin();// Inicializar el sensor//Inicializar Variables API rest.variable("temperature",&temperature); rest.variable("humidity",&humidity); rest.variable("contaminacion",&mq);// Nombres de los Dispositivos rest.set_id("1"); rest.set_name("sensor_wemos");// Conectarse a InternetWiFi.begin(ssid, password);//Cliclo While para verificar coneccion a wifi. tiempo en milisegundoswhile(WiFi.status()!=WL_CONNECTED{delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");// Inicializar Servidor server.begin();Serial.println("Server Started");// IPSerial.println(WiFi.localIP);}//Ciclo Loop para sensar constantementevoidloop(){delay(1000);//Tiempo entre medidas//Lectura de Sensores mq =analogRead(MQ);//MQ 135 Concentracion de Gases humidity = dht.readHumidity();// Humedad Relativa 0% - 100% (Punto de Rocio) temperature = dht.readTemperature();// Temperatura 0°C - 120°C// LLamados al API RestWiFiClient client = server.available;// esta disponoble el servidorif(!client){return;}while(!client.available){delay(1);} rest.handle(client);}
muchas gracias de nuevo su interés
cordial saludo
feliz tarde
Esta muy bien comentado el código, pero corregí algunos errores con mayúsculas y espacios que faltaban
// Hola mundo soy Diego Ramos//Incluir Librerias en el Proyecto#include "ESP8266WiFi.h"#include <aREST.h>#include <DHT.h>#include <DHT_U.h>#include <Adafruit_Sensor.h>// Definir Puertos#define DHTPIND4#define DHTTYPEDHT22#define MQA0//Inicializar sensoresDHTdht(DHTPIN,DHTTYPE);//Crear API RestaREST rest =aREST();//Definir red Wifi a conectar el dispositivoconst char* ssid ="FAMILIA AGUIRRE";const char* password ="1075669292";// Definir puertos#define LISTEN_PORT80//Crear Instancia de ServidorWiFiServerserver(LISTEN_PORT);//Definicion de Variablesfloat mq, humidity, temperature;//Definir lapreparacion del codigo con SETUPvoidsetup(){Serial.begin(9600);// para que lo sensores lean a la misma velocidad dht.begin();// Inicializar el sensor//Inicializar Variables API rest.variable("temperature",&temperature); rest.variable("humidity",&humidity); rest.variable("contaminacion",&mq);// Nombres de los Dispositivos rest.set_id("1"); rest.set_name("sensor_wemos");// Conectarse a InternetWiFi.begin(ssid, password);//Cliclo While para verificar coneccion a wifi. tiempo en milisegundoswhile(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected!");// Inicializar Servidor server.begin();Serial.println("Server Started!");// IPSerial.println(WiFi.localIP());}//Ciclo Loop para sensar constantementevoidloop(){delay(1000);//Tiempo entre medidas//Lectura de Sensores mq =analogRead(MQ);//MQ 135 Concentracion de Gases humidity = dht.readHumidity();// Humedad Relativa 0% - 100% (Punto de Rocio) temperature = dht.readTemperature();// Temperatura 0°C - 120°C// Llamados al API RestWiFiClient client = server.available();// esta disponoble el servidorif(!client){return;}while(!client.available()){delay(1);} rest.handle(client);}```
gracias por el aporte
De la clase anterior a esta me he perdido... hablamos de una Raspberry pi y de repente aparece un Arduino... ¿Cómo conectamos con el wemos y el NodeMcu? por usb? desde el pc? desde la raspberry pi?
Un pequeño diagrama no estaría mal. Gracias!
Hola @deveracs en la clase pasada vimos a detalle el material desde sensores y micro controladores.
para nosotros programar los micro controladores que son la ESP82 (NodeMcu) y la WEMOS utilizaremos el arduino IDE para utilizarlo hay de dos sopas que lo uses en tu compu personal, para eso hay que descargarlo de aqui:
o que uses la raspberry, en la raspberry ya viene instalado con el sistema operativo el arduino IDE
Para montar el código utilizaras tu cable de micro USB a USB y puedes hacerlo en cualquiera de los 2 donde prefieras ya después lo conectaremos por wifi y la raspberry funcionara como servidor o es lo que supongo que haremos
Empiezo a creer que antes de este curso debería haber llevado el curso de arduino
En mi caso el NodeMCU tenía un comportamiento de Access Point (PA), así que agregué una línea de código para convertirlo en una estación (STA).
`
// Conexión a WiFi
// ssid = Nombre_de_la_red
// pass = Contrasenia
// WIFI_STA = modo del dispositivo
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
`
¿Cómo identifiqué ese comportamiento? Apareció una nueva red con el nombre ESP_A83... , y coincidencialmente desapareció minuto después que desconecté el dispositivo.
Este curso tiene una falencia muy grande, no nos enseña como instalar una ESP8266, manejar bien esos sistemas, no nos explica bien la librería API ni como funciona esa lógica. Salta muchas cosas :c
Para los que tuvieron problemas con instalar la ESP al IDE. En el IDE hacer estos pasos: Archivo > Preferencias >Gestor de URLs adicionales de tarjetas.
Ahí escribir
Tengo una duda. ¿Por qué el uso de los asteriscos (*) para la definición del ssid y el password? ¿Por qué no definirlos normalmente?
Esta información se oculta por seguridad.
Qué interesante. ¿Cuál es la teoría atrás de eso? Según tengo entendido eso se usa para declarar punteros.
La librería DHT viene preparada para entregar el dato de temperatura en Grados Fahrenheit, el siguiente código lo hace:
f = dht.readTemperature(true);
si no se envian parámetros, como lo comentó la profe se entregan datos en grados centígrados.
Hola
Ya tengo todo el codigo en arduino
aparentemente esta bien escrito pero al compilar se bloquea. Donde esta el error.
El codigo en ARDUINO IE 2.2.1
//Programacion de sensores de calidad de aire humedad y temperatura para IoT//curso Platzi de IoT//Libraries#include "ESP8266WiFi.h"#include <aREST.h>#include <DHT.h>#include <DHT_U.h>#include <ADAFRUIT_Sensor.h>#include <WiFi.h>//Def#define DHTPIND2#define DHTTYPEDHT22#define MQA0//InitDHTdht(DHTPIN,DHTTYPE);//aRESTaREST rest =aREST();//WiFiconst char* ssid ="Idoru 5g";const char* password ="Boston1745";//Port#define LISTEN_PORT(80);//Create instance of serverWiFiServerserver(LISTEN_PORT);//Variables APIfloat mq, humidity, temperature;//Define codevoidsetup(){Serial.begin(9600); dht.begin();//Init Variable API rest.variable("temperature",&temperature); rest.variable("humidity",&humidity); rest.variable("contamiation",&mq);//Name ID rest.set_id("1"); rest.set_name("sensor_nodemcu");//Connect to WiFiWiFi.begin(ssid, password);while(WiFi.status()!=WL_CONNECTED){dely(1000);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");//Satart Server server.begin();Serial.println("Server started");//IPSerial.println(WiFi.localIP());}voidloop(){//Wait 1sdelay(1000); mq =analogRead(MQ);//MQ135 humidity = dht.readHumidit();//rh %0 - 100 (Punto Rocio) temperature = dht.readTemperature();//0 - 100 *C//Rest CallsWiFiClient client = server.available();if(!client){return;}while(!client.availabel()){delay(1);} rest.handle(client);}```al complilar el programa 
el error resultante es ```js
C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:30:12: error: expected initializer before 'server'30|WiFiServerserver(LISTEN_PORT);|^~~~~~C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:30:30: error: expected unqualified-id before ')' token
30|WiFiServerserver(LISTEN_PORT);|^C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:Infunction'void setup()':C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:47:17: warning:ISOC++ forbids converting a string constant to 'char*'[-Wwrite-strings]47| rest.set_name("sensor_nodemcu");|^~~~~~~~~~~~~~~~C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:52:3: error:'dely' was not declared inthis scope; did you mean 'delay'?52|dely(1000);|^~~~| delay
C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:59:3: error:'server' was not declared inthis scope; did you mean 'Server'?59| server.begin();|^~~~~~|ServerC:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:Infunction'void loop()':C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:70:18: error:'class DHT' has no member named 'readHumidit'; did you mean 'readHumidity'?70| humidity = dht.readHumidit();//rh %0 - 100 (Punto Rocio)|^~~~~~~~~~~| readHumidity
C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:74:23: error:'server' was not declared inthis scope; did you mean 'Server'?74|WiFiClient client = server.available();|^~~~~~|ServerC:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:78:18: error:'class WiFiClient' has no member named 'availabel'; did you mean 'available'?78|while(!client.availabel()){|^~~~~~~~~| available
exit status 1Compilation error: expected initializer before 'server
```C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:30:12: error: expected initializer before 'server' 30|WiFiServerserver(LISTEN\_PORT); |^~~~~~C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:30:30: error: expected unqualified-id before ')' token
 30|WiFiServerserver(LISTEN\_PORT); |^C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:Infunction'void setup()':C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:47:17: warning:ISOC++ forbids converting a string constant to 'char\*' \[-Wwrite-strings] 47| rest.set\_name("sensor\_nodemcu"); |^~~~~~~~~~~~~~~~C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:52:3: error:'dely' was not declared inthis scope; did you mean 'delay'? 52|dely(1000); |^~~~ | delay
C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:59:3: error:'server' was not declared inthis scope; did you mean 'Server'? 59| server.begin(); |^~~~~~ |ServerC:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:Infunction'void loop()':C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:70:18: error:'class DHT' has no member named 'readHumidit'; did you mean 'readHumidity'? 70| humidity = dht.readHumidit();//rh %0 - 100 (Punto Rocio) |^~~~~~~~~~~ | readHumidity
C:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:74:23: error:'server' was not declared inthis scope; did you mean 'Server'? 74|WiFiClient client = server.available(); |^~~~~~ |ServerC:\Users\SANTIAGOURIBE\PEGAOS\hack\PLATZI\IOT\IoT\Cuality-Humidity-Temperature\Cuality-Humidity-Temperature.ino:78:18: error:'class WiFiClient' has no member named 'availabel'; did you mean 'available'? 78|while(!client.availabel()){ |^~~~~~~~~ | available
exit status 1Compilation error: expected initializer before 'server
Que tengo que hacer
Tienes un typo en la linea 52, tienes dely(1000);
y debes cambiarlo a
delay(1000);
espero funcione
Hola @Diego Alexander Forero Higuera
muchas gracias por tu interés
acá va el código:
`
//Incluir Librerias en el Proyecto
#include<ESP8266WiFi.h>
#include<aREST.h>
#include<DHT.h>
#include<DHT_U.h>
#include<Adafruit_Sensor.h>
//Definir red Wifi a conectar el dispositivo
constchar* ssid = "Nombre de la red";
constchar* password = "Contraseña de ña red";
// Definir puertos
#define LISTEN_PORT 80
//Crear Instancia de Servidor
WiFiServer server(LISTEN_PORT);
//Definicion de Variables
float mq, humidity, temperature;
//Definir lapreparacion del codigo con SETUP
voidsetup(){
serial.begin(9600); // para que lo ssensores lean a la misma velocidad
dht.begin(); // Inicializar el sensor
//Inicializar Variables API
rest.variable("temperature",&temperature);
rest.variable("humidity",&humidity);
rest.variable("contaminacion",&mq);
// Nombres de los Dispositivos
rest.set_id("1");
rest.set_name("sensor_wemos");
// Conectarse a Internet
WiFi.begin(ssid, password);
//Cliclo While para verificar coneccion a wifi. tiempo en milisegundos
while (WiFi.status() != WL_CONNECTED {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
//Ciclo Loop para sensar constantemente
voidloop(){
delay(1000); //Tiempo entre medidas
//Lectura de Sensores
mq = analogRead(MQ); //MQ 135 Concentracion de Gases
humidity = dht.readHumidity(); // Humedad Relativa 0% - 100% (Punto de Rocio)
temperature = dht.readTemperature(); // Temperatura 0°C - 120°C
// LLamados al API Rest
WiFiClient client = server.available; // esta disponoble el servidor
if (!client){
return;
}
while(!client.available){
delay(1);
}
rest.handle(client);
}
`
muchas gracias de nuevo su interés
cordial saludo
feliz tarde
Por favor modifiquen la ruta de aprendizaje, por los comentarios y nulo entendimiento que he tenido en esta clase me doy cuenta que hubiera sido mejor aprender el uso de arduino.
Aqui una ayuda para los que la necesiten.
//190718//Libs#include "ESP8266WiFi.h"#include <aREST.h>#include <DHT.h>#include <DHT_U.h>#include <Adafruit_Sensor.h>//Ports#define DHTPIND5#define DHTTYPEDHT11#define MQA0#define LISTEN_PORT80//Ini sensoresDHTdht(DHTPIN,DHTTYPE);//RestaREST rest =aREST();//Red WIFIconst char* ssid ="WIFI";const char* password ="Contraseña";//InstWiFiServerserver(LISTEN_PORT);//Definicion de Variablesfloat mq, humidity, temperature;//Setupvoidsetup(){Serial.begin(9600);// para que lo ssensores lean a la misma velocidad dht.begin();// Inicializar el sensor//API rest.variable("Temperatura: ",&temperature); rest.variable("Humedad: ",&humidity); rest.variable("Calidad Aire",&mq);// Identificación rest.set_id("1"); rest.set_name("Sensor NanoMCUv3");// Conexión WIFIWiFi.begin(ssid, password);while(WiFi.status()!=WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi conectado");// ini Server server.begin();Serial.println("Server Iniciado");// IPSerial.println(WiFi.localIP());}voidloop(){delay(1000); mq =analogRead(MQ); humidity = dht.readHumidity(); temperature = dht.readTemperature();//Llama APIWiFiClient client = server.available();if(!client){return;}while(!client.available()){delay(1);} rest.handle(client);}
Para usar la NodeMCU se debe agregar este link a preferencias y luego en el gestor de placas buscar ESP8266 instalarlo y ya funcionará.