×

ARDUINO

Control d’accés amb contrasenya. Orgue de llums. Comparativa de editors Arduino. Projecte bon Nadal. Sensor de gas i de fums. Control de la qualitat del aire interior (CO2) amb semàfor LED.

NodeMCU

NodeMCU-ThingSpeak. ThingSpeak. NodeMCU com AccessPoint. Control de la llum de casa per web. Control de un led per el mòbil. Sistema de fitxers en ESP8266. Altura del nivell d'aigua. Avis d’alarma a Telegram. Control de la llum de casa des de Telegram. Control de la intensitat de llum de un LED per Internet. Magatzematge de temperatura i humitat en Thinger. Publicar temperatura i humitat en Google Sheets. ESP8266 i Firebase. ESP8266-BME280 Firebase. La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega..

ESP32

ESP32-CAM, exemple de prova. Esp32-Cam captura fotos per ser vistes en la WEB. Pujar fotos a un servidor FTP amb ESP32-CAM. Foto amb ESP32-CAM i Telegram. Alarma amb avis a Telegram, utilitzant la placa ESP32-CAM.

PROGRAMACIÓ

Matemàtiques. App Inventor tutorial. MicroPython en ESP8266. Visual Estudio Code per Arduino

Intel·ligència artificial

Classificador d’imatges.

SERVIDORS

Instal·lar i configurar Apache en Ubuntu. Accés a un servidor Linux remotament. Client i Servidor FTP.

MÀQUINES VIRTUALS

Màquina virtual UBUNTU. WindowsXP en Virtualbox.

ELECTRÒNICA

Simulador Multisim. Simulador Proteus.

BASE DE DADES

MySQL. Instal·lació. MySQL. Aplicacions.

JAVA

Netbeans Maven MySQL. Java+Netbeans+Maven+EclipseLink+MySQL Aplicació d’escriptori JavaFX App JavaFX amb SceneBuilder App Java-Swing
favicon
logo

Tresavis

Benvinguts al blog de tresavis de noves tecnologies i més.

Correu : tresavis3@gmail.com

facebook   Instagram   youtube   x   tiktok

☰ Pràctiques   ☰ Articles

Descripció.

Es un projecte de domòtica per controlar els estats de un led, encès o apagat.

A traves de una aplicació Android per accedir des de el mòbil a la placa i al led, per WiFi. La app conté dos botons un ON i l'altre OFF.

Nota: En aquest cas es controla un led, però pot ser qualsevol dispositiu, aire condicionat, caldera, el reg del jardí, etc.

hardware

Components.

Placa NodeMCU amb el xip ESP8266.

Led i resistència.

Xarxa WiFi.

App Inventor com editor de la app de Android.

Ide de Arduino per programar i carregar el programa a la placa.

Circuit.

Circuit obtingut gràcies a la aplicació de circuito.io https://www.circuito.io

circuit

Codi Arduino.

ControlLedMobil.ino
          
//A traves de una app de mobil, es vol encendre i apagar
//un led.
//components: NodeMCU, led, resistencia 330 oms

//llibreries
#include <ESP8266WiFi.h>                   

//la nostre wifi
const char* ssid = "mirablau";       
const char* password = "********";
//el nostre servidor utilitza el port 80    
WiFiServer server(8080);                   

 //definim el pin del led
#define pinLed D2  

//estat en que es troba el led                
int estat = LOW;                         

/////////////////////  setup()  ////////////////////////////////
void setup() {
  //inicialitze el port serie a 115200 baudis
  Serial.begin(115200);
  delay(10);
  // el pinLed es de sortida i low
  pinMode(pinLed, OUTPUT);              
  digitalWrite(pinLed, LOW);            

  //iniciatitzem la WiFi
  WiFi.begin(ssid, password);
             
  Serial.printf("\n\nConnectat a la xarxa: %s\n", WiFi.SSID().c_str());
  //mentres no es connecta a la WiFi escriu punts.
  while (WiFi.status() != WL_CONNECTED) { 
    delay(500);
    Serial.print(".");                    
  }
  Serial.println("");
  Serial.println("WiFi connectada");       

  //inicialitzem el servidor
  server.begin();    
  Serial.println("Servidor inicialitzat");
 
 Serial.printf("\n\nURL obtinguda per el servidor: http://%s/\n", WiFi.localIP().toString().c_str());
} 

//////////////////////////////// loop() //////////////////////////////////////
void loop() {
  // el servidor espera un client
  //si no hi ha client, torna ha començar el bucle
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  //hi ha client
  Serial.println("nou client des de Android");
  while(!client.available()){
    delay(1);
  }
 
  //llegim la peticio del client
  String peticio = client.readStringUntil('\r');
  Serial.println(peticio);
  client.flush();
  String resposta;
  //analitzem la peticio
  // si la peticio conté al subcadena '/ON' 
  if (peticio.indexOf('/ON') != -1) {
    estat = HIGH;
    resposta="Led encés, ON";
  }
  // si la peticio conté la subcadena '/OFF' 
  else if (peticio.indexOf('/OFF') != -1){
    estat = LOW;
    resposta="Led apagat, OFF";
  }else{
    Serial.println("Error.");
    client.stop();
    return;
  }
  //encenem o apagem depanent del estat
  digitalWrite(pinLed, estat);
  Serial.print("Resposta: ");
  Serial.println(resposta);
  delay(10);

  //////////////////////////////////////////////
  // Pàgina WEB. ////////////////////////////
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  Comilles importants.
  client.println(resposta);
  Serial.println("Petició finalitzada"); 
 //es queda a espera de una nova petició.
  Serial.println("");
 
}

Explicació del codi.

Les APIS que entén el servidor, son:

https://IP_del_servidor/ON

https://IP_del_servidor/OFF

La placa NodeMCU es conecta a la xarxa local per WiFi i obté una IP, la qual servirà per connectar la App de mòbil al servidor NodeMCU.

Una vegada el client ha entrat en el servidor, aquest llegeix la petició d'arribada que porta la IP, fins a final de línia "\r".

Si la petició porta "/ON", l'acció a realitzar es:

estat = HIGH;

resposta="Led encés";

Altrament si la petició porta "/OFF", l'acció a realitzar es:

estat = LOW;

resposta="Led apagat";

Encenem o apaguem depenent del estat:

digitalWrite(pinLed, estat);

explicacio

El servidor retorna la resposta al client (al mòbil), el codi per respondre es en llenguatge HTML. El servidor crea una pagina web perquè el client pugui visualitzar la resposta.

explicacio

Comprovem si funciona correctament el codi.

El monitor sèrie, mostra la IP que el router a donat al servidor NodeMCU:

explicacio

En el navegador escrivim la IP obtinguda seguida de la comanda GET:

192.168.1.113/ON

La resposta es "Led encès" i realment està encès.

Altrament si en el navegador escrivim:

192.168.1.113/OFF

La resposta es "Led apagat" i realment està apagat.

Codi per la App.

Fem servir App Inventor, que es un editor de codi online per poder programar el mòbil Android. En un article anterior hem explicat la configuració i el funcionament de aquesta eina, podeu consultar-la en:

App Inventor

Disseny de la interfície de l'aplicació.

diseny

Començant per la par de dalt de la pantalla, posem un Canvas i a dins el nostre logo, que hem pujat des de el nostre ordinador. Seguidament dos Labels, el títol i la etiqueta de la IP, un TextBox on escriurem la IP del servidor a connectar, dos botons, ON i OFF, una altre etiqueta per enunciar la resposta del servidor, que es mostra en un label que queda a sota.

Codi de la App.

diseny

Explicació del codi.

Al clicar el boto ON, posem en Web1 la URL:

https:// IP_escrita_en_el_TextBox/ON

Al clicar el boto OFF, posem en Web1 la URL:

https:// IP_escrita_en_el_TextBox/OFF

Quan el servidor retorna resposta, posem la resposta en el Label lbResposta.

Instal·lació del codi i resultat.

Es descarrega directament des de la plataforma AppInventor al mòbil o tauleta. Fem servir el mètode USB, explicat en el article App Inventor, l'instal·lem i l'executem.

Resultat final.

diseny
diseny

Contingut.


Nosaltres

tren
diseny
diseny
diseny
diseny
diseny

You can't make an omelette without breaking eggs.


Tags

Noves tecnologies WEB Arduino Domótica MycroPython NodeMCU IoT Java ESP8266 Lora C++ Programació Server-Client