Димиране на LED през WiFi мрежа - ESP32 / android APP
Използваме ESP32 devkit 1.
ESP32 работи в режим AP. Това означава, че модула ще е видим в WiFi със своето SSID.
Към него могат да се свържат като клиент различни модули, например телефон, компютър и т.н.
Дефинираме SSID и парола за да може клиент да се свърже към модула.
const char* ssid = "ESP32_AP_demo"; const char* password = "12345678";
IP на ESP32 може да се променя но в софтуера не е показано как се прави. Използва се фабрично зададения
IP: 192.168.4.1
Свързани са два LED - червен и зелен. През резистори 330 ома към изводи 26, 27.
// PIN definition const int GRN_led = 27; const int RED_led = 26;
Зеленият LED показва наличието на клиент, който се е свързал с модула.
Червеният лед е този, който ще се управлява през WiFi мрежата
Към него се подава PWM, така че да може да се регулира яркостта му. Честотата която е избрана е 1kHz и 255 стъпки (8 бита)
// setting PWM properties const int freq = 1000; const int ledChannel = 0; const int resolution = 8; unsigned char dutyCycle=0; // 0 do 255

Андроид апликацията е създадена в средата на MIT APP INVENTOR. Инсталационен apk файл може да бъде изтеглен
ТУК
Блоковата схема на апликацията е:

Чрез бутона се променя статуса на светодиода - on / off. Чрез плъзгача се задава яркостта на светене - стъпки PWM 1-254.
Предаването да данните е чрез POST request. Данните са пакетирани като json - {"led_status":"1","led_pwm":"123"}
В двете полета под плъзгача е изписано реалното състояние на параметрите, които ESP32 връща към апликацията като отговор
на post request.
А ето и целият код за ESP32 в Arduino среда
#include "WiFi.h"
#include "WiFiClient.h"
#include "ArduinoJson.h"
//DynamicJsonDocument jsonBuffer(150);
StaticJsonDocument<256> jsonBuffer;
WiFiServer server(80);//, ser8000(8000);
// PIN definition
const int GRN_led = 27;
const int RED_led = 26;
// setting PWM properties
const int freq = 1000;
const int ledChannel = 0;
const int resolution = 8;
unsigned char dutyCycle=0; // 0 do 255
const char* ssid = "ESP32_AP_demo";
const char* password = "12345678";
//timeout for communication
unsigned long currentMillis;
unsigned char led_status=0;
void setup() {
// configure hardware and vars
pinMode(GRN_led,OUTPUT);pinMode(RED_led,OUTPUT);
digitalWrite(GRN_led,LOW);
// WiFi.mode(WIFI_STA);
// WiFi.begin(ssid,password);
WiFi.softAP(ssid,password);
server.begin();
Serial.begin(115200, SERIAL_8N1);
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(RED_led, ledChannel);
ledcWrite(ledChannel, dutyCycle);
}
void loop() {
String tmp;
WiFiClient cl = server.available(); // Listen for incoming clients
if (cl) {
digitalWrite(GRN_led,HIGH);
while (!cl.available()) delay(1); // wait for request
String req = cl.readString();
// json is inside {}
int a,b;
a=req.indexOf('{');b=req.indexOf('}');
req=req.substring(a,b+1);
Serial.println(req);
// json is inside {}
auto error = deserializeJson(jsonBuffer, req);
if (error)
{
Serial.println(error.f_str());//"parseObject() failed");
}
else
{
if (jsonBuffer.containsKey("led_status")==true)
{
led_status=jsonBuffer["led_status"];
Serial.println(String(led_status));
}
if (jsonBuffer.containsKey("led_pwm")==true)
{
dutyCycle =jsonBuffer["led_pwm"];
}
// predavam json s promenlivite
cl.print("HTTP/1.1 200 OK\r\n");//\r\n\r\n"); //404 Not Found");// // sled OK da nqma interval
cl.print("Content-Type: application/json\r\n\r\n");
tmp="{\"stat\" : \""+String(led_status)+"\",\"pval\" : \""+String(dutyCycle)+"\"}";
cl.print("\r\n");
cl.print(tmp);
cl.stop();
}
}else{digitalWrite(GRN_led,LOW);}
if (led_status==0){ledcWrite(ledChannel, 0);}else{ledcWrite(ledChannel, dutyCycle);}
}

Коментари
| electro 2023-09-25 22:42:18 | How is this working |
|
ЕЛЕКТРОНИКС ДИЗАЙН ООД Фирма Електроникс Дизайн ООД е създадена 2007г гр. София. Дейността на фирмата е проектиране и производство на потребителска електроника. |
Контакти
|
|---|



Телефон: 0898 518 261
e-mail: info@ekits.eu
Адрес: София бул. Европа 177