Tutorial ESP32 43/55 - Saldhiga Cimilada Internetka ee IoT | Qalabka Barashada IoT ee SunFounder ee ESP32
Cashiggan, waxaanu ku dhisaynaa xarun cimilo oo ku xidhan internetka iyadoo la adeegsanayo ESP32 iyo looxa sawir-qabashada ee SunFounder. Mashruucani wuxuu u oggolaanayaa ESP32 inuu soo celiyo xogta cimilada ee waqtiga dhabta ah, oo ay ku jiraan heerkulka iyo qoyaanka, oo uu ku muujiyo shaashadda LCD. Codsiyadani ma muujiyaan oo kaliya awoodaha ESP32, laakiin waxay sidoo kale muujinayaan sida loo soo qaado oo loo kala saaro xogta API-ga dibadda ah.

Markaan ku sii socono casharrada, waxaanu isku xidhaynaa qaybaha, waxaanu habaynaynaa koodhka, waxaanu hubinaynaa in wax walba si wanaagsan u wada shaqeeyaan. Natiijada ugu dambaysa waxay noqon doontaa xarun cimilo oo si buuxda u shaqeysa oo cusboonaysiisa akhrinteeda 10 ilbiriqsi kasta, iyadoo bixinaysa muujin cad oo kooban oo ku saabsan xaaladaha cimilada ee hadda jira (fiidiyowga 00:30).
Qalabka La Sharxay
Qaybaha ugu muhiimsan ee loo isticmaalo mashruucan waxaa ka mid ah microcontroller-ka ESP32, shaashadda LCD, iyo fiilooyinka lagama maarmaanka ah. ESP32 wuxuu ku qalabaysan yahay Wi-Fi iyo Bluetooth oo ku dhex jira, taasoo u oggolaanaysa inuu ku xidhmao internetka oo uu soo celiyo xogta. Shaashadda LCD waxay muujin doontaa macluumaadka cimilada ee hadda jira, oo ay ku jiraan heerkulka iyo qoyaanka.
LCD-ga aan isticmaalayno waa shaashad 16x2 oo xarfo ah, taasoo la macno ah inay muujin karto laba sadar oo 16 xaraf ah mid kasta. Tani waxay ku filnaan doontaa soo-saarka macluumaadka cimilada. ESP32 wuxuu la xidhiidhi doonaa LCD-ga iyadoo loo marayo I2C, taasoo fududaynaysa fiilooyinka iyadoo la isticmaalayo kaliya laba khad oo xog ah.
Faahfaahinta Xogta
| Soo-saare | Espressif |
|---|---|
| Nambarka qaybta | ESP32-WROOM-32 |
| Danabka Logic/IO | 3.3 V |
| Danabka sahayda | 3.0–3.6 V |
| Korontada soo-saarka (kanaal kasta) | 12 mA ugu badan |
| Korontada ugu sarreysa (kanaal kasta) | 40 mA |
| Hagaha soo-noqnoqoshada PWM | 1 kHz |
| Heerarka xadka gelinta | 0.3 V (hoose), 0.7 V (sare) |
| Hoos-u-dhaca danabka / RDS(on) / dheregsanaanta | 0.5 V |
| Xadka kulaylka | -40 ilaa 85 °C |
| Baakad | QFN48 |
| Xusuus / noocyo kale | Waxaa ku jira noocyo badan oo loogu talagalay codsiyo kala duwan |
- Hubi in ESP32 lagu shideeyo danab deggan oo 3.3 V ah.
- Isticmaal dhul (ground) wadaag ah dhammaan qaybaha si looga fogaado dhibaatooyinka isgaarsiinta.
- Hubi cinwaanka I2C ee LCD-ga adigoo isticmaalaya scanner-ka I2C.
- La soco xaaladda xidhiidhka Wi-Fi si looga fogaado go'itaanka inta lagu jiro soo-celinta xogta.
- Maaree khaladaadka JSON parsing si loo helo xog lagu kalsoonaan karo.
Tilmaamaha Fiilooyinka

Si aad u xidho qaybaha, ka bilow adigoo ku xidhaya LCD-ga ESP32. LCD-ga wuxuu isticmaali doonaa interface-ka I2C, markaa ku xidh binka SDA ee LCD-ga GPIO21 ee ESP32 iyo binka SCL GPIO22. Hubi inaad ku xidho binnada korontada iyo dhulka ee LCD-ga 5V iyo GND ee ESP32, siday u kala horreeyaan.
Marka xigta, hubi in ESP32 si sax ah loo shideeyo iyadoo la isticmaalayo batteriga lithium-ka ee ku jira ama xidhiidhka USB. Batterigu wuxuu bixiyaa fududayn, halka xidhiidhka USB uu faa'iido u leeyahay barnaamijyada iyo cillad-sheegista. Ugu dambayntii, hubi dhammaan xidhiidhada inay adag yihiin si looga fogaado dhibaatooyinka fiilooyinka dabacsan ee carqaladayn kara shaqada.
Tusaalooyinka Koodhka & Sharaxaad
Waqtiga dejinta barnaamijkeena, waxaanu bilaabaynaa isgaarsiinta serial-ka waxaanu ku xidhnaa shabakadda Wi-Fi iyadoo la isticmaalayo SSID iyo erayga sirta ah ee la bixiyay. Qaybta koodhka ee soo socota waxay maamushaa xidhiidhka Wi-Fi:
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
Koodhkani wuxuu hubinayaa in ESP32 uu ku xidhmaado shabakadda Wi-Fi ee la cayimay ka hor inta uusan sii wadin soo-celinta xogta. Haddii xidhiidhku fashilmo, wuxuu si joogto ah ugu dadaali doonaa inuu dib u xidho.
Marka xigta, waxaanu u baahanahay inaanu dirno codsi HTTP GET si aanu u soo celino xogta cimilada. Tan waxaa lagu sameeyaa iyadoo la isticmaalayo qaybta koodhka ee soo socota:
String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&units=metric" + "&APPID=" + openWeatherMapApiKey;
jsonBuffer = httpGETRequest(serverPath.c_str());
Halkan, waxaanu dhisaynaa URL-ka codsiga API, kaasoo ay ku jiraan magaalada, koodhka dalka, iyo furayaasheena API. Shaqada httpGETRequest ayaa markaa loo yaqaan si loo soo celiyo xogta cimilada.
Ugu dambayntii, waxaanu kala saaraynaa jawaabta JSON waxaanu ku muujinaynaa xogta ku habboon LCD-ga:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(time);
lcd.print(" ");
lcd.print(myObject["weather"][0]["main"]);
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(myObject["main"]["temp"]);
lcd.print("\xDF"); // "°" char
lcd.print("C ");
lcd.print("H:");
lcd.print(myObject["main"]["humidity"]);
lcd.print("%");
Qaybta koodhka ee soo socota waxay cusboonaysiisaa shaashadda LCD macluumaadka waqtiga hadda, xaaladda cimilada, heerkulka, iyo qoyaanka. Waxay nadiifisaa shaashaddii hore waxayna dejisaa cursor-ka meelaha ku habboon sadar kasta.
Muuujin / Waxa Lagu Filan Karaa
Marka fiilooyinka iyo barnaamijyada si guul leh loo dhammeeyo, xaruntaada cimiladu waxay ku xidhmi doontaa Wi-Fi waxayna bilaabi doontaa soo-celinta xogta cimilada 10 ilbiriqsi kasta. Waxaad arki doontaa heerkulka hadda, qoyaanka, iyo xaaladaha cimilada oo lagu muujiyay shaashadda LCD. Haddii ESP32 uu ku guuldareysto inuu ku xidhmaado Wi-Fi, waxa uu daabici doonaa farriin khalad ah kormeeraha serial-ka.
Ka fiirsada xaddidka wicitaannada API si aadan uga xannaan laabmin adeegga OpenWeatherMap. Haddii aad la kulanto dhibaatooyin soo celinta xogta, hubi furaha API-gaaga oo hubi in magaaladaada iyo koodka waddankaagu si sax ah loo qoray (fiidiyowga 15:45).
Waqtiyada Fiidiyowga
- 00:00 Bilow
- 2:00 Hordhaca mashruuca
- 5:04 Xisaabta OpenWeather
- 6:11 Xirista (Wiring)
- 8:05 Sharaxaada koodka Arduino
- 14:13 Curiyeyaasha JASON ee koodka
- 20:23 Doorashada guddiga ESP32 iyo dekedda COM ee Arduino IDE
- 22:05 Muujinta Saldhigga Cimilada ee LCD1602
- 23:45 Muujinta Saldhigga Cimilada ee LCD2004
/*
Rui Santos
Complete project details at Complete project details at https://RandomNerdTutorials.com/esp32-http-get-open-weather-map-thingspeak-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";
// Your Domain name with URL path or IP address with path
String openWeatherMapApiKey = "openWeatherMapApiKey";
// Replace with your country code and city
// Fine the country code by https://openweathermap.org/find
String city = "CITY";
String countryCode = "COUNTRY CODE";
// THE DEFAULT TIMER IS SET TO 10 SECONDS FOR TESTING PURPOSES
// For a final application, check the API call limits per hour/minute to avoid getting blocked/banned
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 10 seconds (10000)
unsigned long timerDelay = 10000;
String jsonBuffer;
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
// set LCD address, number of columns and rows
// SDA -> GPIO21, SCL -> GPIO22
// lcd address is 0x27, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
// NTP Server time
const char* ntpServer = "pool.ntp.org";
long gmtOffset_sec = 0;
int daylightOffset_sec = 0; //3600;
void setup() {
Serial.begin(115200);
// WiFi
WiFi.begin(ssid, password);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
Serial.println("Timer set to 10 seconds (timerDelay variable), it will take 10 seconds before publishing the first reading.");
// initialize LCD
lcd.init();
// turn on LCD backlight
lcd.backlight();
}
void loop() {
// Send an HTTP GET request
if ((millis() - lastTime) > timerDelay) {
// Check WiFi connection status
if(WiFi.status()== WL_CONNECTED){
String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&units=metric" + "&APPID=" + openWeatherMapApiKey;
jsonBuffer = httpGETRequest(serverPath.c_str());
Serial.println(jsonBuffer);
JSONVar myObject = JSON.parse(jsonBuffer);
// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(myObject) == "undefined") {
Serial.println("Parsing input failed!");
return;
}
// Serial.print("JSON object = ");
// Serial.println(myObject);
// Serial.print("Temperature: ");
// Serial.println(myObject["main"]["temp"]);
// Serial.print("Pressure: ");
// Serial.println(myObject["main"]["pressure"]);
// Serial.print("Humidity: ");
// Serial.println(myObject["main"]["humidity"]);
// Serial.print("Wind Speed: ");
// Serial.println(myObject["wind"]["speed"]);
// Get time
gmtOffset_sec = myObject["timezone"];
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
// time =
String time = printLocalTime();
// LCD Print
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(time);
lcd.print(" ");
lcd.print(myObject["weather"][0]["main"]);
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(myObject["main"]["temp"]);
lcd.print("\xDF"); // "°" char
lcd.print("C ");
lcd.print("H:");
lcd.print(myObject["main"]["humidity"]);
lcd.print("%");
}
else {
Serial.println("WiFi Disconnected");
}
lastTime = millis();
}
}
String printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return "null";
}
// Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
// get time format HH:MM
char timeHour[3];
strftime(timeHour,3, "%H", &timeinfo);
char timeMinute[3];
strftime(timeMinute,3, "%M", &timeinfo);
String time = String(timeHour) + ":" + String(timeMinute);
Serial.println(time)
; return time;
}
String httpGETRequest(const char* serverName) {
WiFiClient client;
HTTPClient http;
// Your Domain name with URL path or IP address with path
http.begin(client, serverName);
// Send HTTP POST request
int httpResponseCode = http.GET();
String payload = "{}";
if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
payload = http.getString();
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();
return payload;
}
Common Course Links
Common Course Files
Kheyraadka & Tixraacyada
-
DukumentiESP32 Tutorial 43/55- SunFounder doc page for IoT Internet Weather Stationdocs.sunfounder.com
Faylasha📁
Fayl la'aan.