Phone Number Phone Number Телефон: 0898 518 261 Fbook     Fbook     Smiley face Smiley face
Logo
ЕЛЕКТРОНИКС ДИЗАЙН ООД
1 / 3
Проектиране на печатни платки
2 / 3
3D принтиране SLA
3 / 3
Фирмуер за микроконтролери - С и асемблер

Димиране на LED през WiFi мрежа - ESP32 / android APP

Използваме ESP32 devkit 1.
ESP32 работи в режим AP. Това означава, че модула ще е видим в WiFi със своето SSID. Към него могат да се свържат като клиент различни модули, например телефон, компютър и т.н.

ap mode

Дефинираме 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
  

phone android app

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

phone android app

Чрез бутона се променя статуса на светодиода - 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);}
}
  

ESP32 7 Segment LED

Коментари

Име

Съобщение

 
electro

2023-09-25 22:42:18

How is this working

ЕЛЕКТРОНИКС ДИЗАЙН ООД

Фирма Електроникс Дизайн ООД е създадена 2007г гр. София. Дейността на фирмата е проектиране и производство на потребителска електроника.

Контакти

phone Телефон: 0898 518 261

maile-mail: info@ekits.eu

address Адрес: София бул. Европа 177