குறியீட்டை தேடு

ESP32 பயிற்சி 50/55 - உலகில் எங்கிருந்தும் RGB LED ஐ கட்டுப்படுத்தவும் | SunFounder இன் ESP32 கிட்

ESP32 பயிற்சி 50/55 - உலகில் எங்கிருந்தும் RGB LED ஐ கட்டுப்படுத்தவும் | SunFounder இன் ESP32 கிட்

இந்த டுடோரியலில், ESP32 மைக்ரோகண்ட்ரோலரைப் பயன்படுத்தி Wi-Fi வழியாக RGB LED இன் நிறத்தை எவ்வாறு கட்டுப்படுத்துவது என்பதைக் கற்றுக்கொள்வோம், MQTT நெறிமுறை மற்றும் Adafruit IO சேவையைப் பயன்படுத்தி. இந்த அமைப்பு உலகில் எங்கிருந்தும் RGB LED இன் நிறத்தை மாற்ற உங்களை அனுமதிக்கிறது, IoT தொழில்நுட்பத்தின் நடைமுறை பயன்பாட்டை வழங்குகிறது. விரும்பிய நிறத்தைத் தேர்ந்தெடுக்க ஸ்லைடர்கள் மற்றும் வண்ணத் தேர்வியை எவ்வாறு பயன்படுத்துவது என்பதையும் ஆராய்வோம்.

esp32-50-RGB-led-mqtt-main

ESP32 என்பது உள்ளமைக்கப்பட்ட Wi-Fi மற்றும் புளூடூத் திறன்களைக் கொண்ட ஒரு சக்திவாய்ந்த மைக்ரோகண்ட்ரோலர் ஆகும், இது IoT திட்டங்களுக்கு ஏற்றதாக அமைகிறது. இந்த கட்டுமானத்தில், ESP32 உடன் RGB LED ஐ இணைத்து, Adafruit வழங்கும் MQTT ப்ரோக்கர் மூலம் அதன் நிறத்தைக் கட்டுப்படுத்துவோம். டுடோரியல் வன்பொருள் அமைப்பு, வயரிங் வழிமுறைகள் மற்றும் எல்லாவற்றையும் சீராக இயங்கச் செய்ய தேவையான குறியீடு ஆகியவற்றின் மூலம் உங்களை வழிநடத்தும் (வீடியோவில் 00:00 மணிக்கு).

வன்பொருள் விளக்கம்

esp32-50-RGB-led
esp32-50-RGB-led

இந்த திட்டத்திற்கு, நாம் பயன்படுத்தும் முக்கிய கூறுகள் ESP32 மைக்ரோகண்ட்ரோலர் மற்றும் RGB LED ஆகும். ESP32 Wi-Fi நெட்வொர்க்குகளுடன் இணைக்கும் திறன் கொண்டது, இது Adafruit IO சேவையுடன் தொடர்பு கொள்ள அனுமதிக்கிறது. RGB LED இல் மூன்று தனித்தனி LED கள் (சிவப்பு, பச்சை மற்றும் நீலம்) உள்ளன, அவை பரந்த அளவிலான வண்ணங்களை உருவாக்க கலக்கப்படலாம்.

RGB LED பொதுவான அனோட் அல்லது பொதுவான கேத்தோடு கொள்கையில் செயல்படுகிறது, அதாவது தனிப்பட்ட LED களின் அனோட் (நேர்மறை) அல்லது கேத்தோடு (எதிர்மறை) அவை வேலை செய்ய சரியாக இணைக்கப்பட வேண்டும். ஒவ்வொரு நிறத்தையும் பல்ஸ் அகல பண்பேற்றம் (PWM) பயன்படுத்தி கட்டுப்படுத்தலாம், இது கடமை சுழற்சியை மாற்றுவதன் மூலம் ஒவ்வொரு LED இன் பிரகாசத்தையும் சரிசெய்கிறது.

ES32-38_RGB_LED-wiring

டேட்டாஷீட் விவரங்கள்

உற்பத்தியாளர் SunFounder
பகுதி எண் RGB LED
முன்னோக்கி மின்னழுத்தம் (VF) 2.0–3.4 V
முன்னோக்கி மின்னோட்டம் (IF) 20 mA
உச்ச அலைநீளம் (nm) சிவப்பு: 620, பச்சை: 525, நீலம்: 465
பேக்கேஜ் நிலையான 4-முள்
குறிப்புகள் / மாறுபாடுகள் பொதுவான அனோட் அல்லது பொதுவான கேத்தோடு விருப்பங்கள் கிடைக்கின்றன

 

  • மின்னோட்டத்தைக் கட்டுப்படுத்த ஒவ்வொரு LED நிறத்திற்கும் 220 ஓம் மின்தடையங்களைப் பயன்படுத்தவும்.
  • பொதுவான அனோட் அல்லது கேத்தோடு உள்ளமைவுக்கு சரியான வயரிங்கை உறுதிசெய்யவும்.
  • பிரவுன்அவுட்களைத் தவிர்க்க ESP32 இன் மின்வழங்கலைச் சரிபார்க்கவும்.
  • மென்மையான வண்ண மாற்றங்களுக்கு PWM அதிர்வெண்ணை வரம்புகளுக்குள் வைத்திருங்கள்.
  • Adafruit IO சேவையுடன் இணைக்க Wi-Fi சான்றுகள் சரியாக இருப்பதை உறுதிசெய்யவும்.

வயரிங் வழிமுறைகள்

ES32-38_RGB_LED-wiring

RGB LED ஐ ESP32 உடன் இணைக்க, RGB LED இல் உள்ள முனைகளை அடையாளம் காண்பதன் மூலம் தொடங்கவும். மிக நீளமான முள் பொதுவான முள் ஆகும். பொதுவான அனோட் உள்ளமைவுக்கு, இந்த முள் நேர்மறை மின்னழுத்த விநியோகத்துடன் (3.3V) இணைக்கவும். மற்ற மூன்று முனைகள் சிவப்பு, பச்சை மற்றும் நீல LED களுக்கு ஒத்திருக்கும். சிவப்பு முள் GPIO 27 உடன், பச்சை முள் GPIO 26 உடன், நீல முள் GPIO 25 உடன் இணைக்கவும். இந்த இணைப்புகள் ஒவ்வொன்றும் LED களின் வழியாக பாயும் மின்னோட்டத்தைக் கட்டுப்படுத்த 220 ஓம் மின்தடையம் வழியாக செய்யப்பட வேண்டும்.

அடுத்து, ESP32 இன் தரை (GND) உங்கள் சுற்றுகளின் தரை வரியுடன் இணைக்கவும். இடைப்பட்ட இணைப்புகளைத் தடுக்க வயரிங் பாதுகாப்பாக இருப்பதை உறுதிசெய்யவும். பொதுவான கேத்தோடு RGB LED ஐப் பயன்படுத்தினால், பொதுவான முள் தரையுடன் இணைத்து, தனிப்பட்ட வண்ண முனைகளை மின்தடையங்கள் வழியாக நேர்மறை விநியோகத்துடன் இணைக்கவும். சுற்றுக்கு மின்சாரம் வழங்குவதற்கு முன் அனைத்து இணைப்புகளையும் இருமுறை சரிபார்க்கவும்.

குறியீடு எடுத்துக்காட்டுகள் & விளக்கம்

Arduino குறியீட்டில், redPin, greenPin மற்றும் bluePin என்ற அடையாளங்காட்டிகளைப் பயன்படுத்தி சிவப்பு, பச்சை மற்றும் நீல LED களுக்கான முனைகளை வரையறுப்பதன் மூலம் தொடங்குகிறோம். கூடுதலாக, redChannel, greenChannel மற்றும் blueChannel ஐப் பயன்படுத்தி ஒவ்வொரு நிறத்திற்கும் PWM சேனல்களை வரையறுக்கிறோம். PWM அதிர்வெண் 5000 Hz ஆக 8-பிட் தெளிவுத்திறனுடன் அமைக்கப்பட்டுள்ளது.

const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;

setup() செயல்பாட்டில், PWM சேனல்களைத் துவக்கி தொடர்புடைய முனைகளை இணைக்கிறோம். வரையறுக்கப்பட்ட சான்றுகளைப் பயன்படுத்தி Wi-Fi நெட்வொர்க்குடன் இணைந்து, Adafruit IO உடன் தொடர்புக்கு MQTT கிளையண்டை அமைக்கிறோம்.

void setup() {
  ledcSetup(redChannel, freq, resolution);
  ledcAttachPin(redPin, redChannel);
  // Connect to WiFi
  WiFi.begin(WLAN_SSID, WLAN_PASS);
}

முக்கிய லூப் MQTT இணைப்பைச் சரிபார்த்து உள்வரும் செய்திகளைச் செயலாக்குகிறது. தற்போதைய RGB மதிப்புகளை சீரியல் மானிட்டரில் அச்சிடுகிறது. MQTT சந்தாக்கள் மூலம் பெறப்பட்ட மதிப்புகளின் அடிப்படையில் LED இன் நிறம் புதுப்பிக்கப்படுகிறது.

void loop() {
  MQTT_connect();
  mqtt.processPackets(500);
  setColor();
}

முழு குறியீட்டின் கூடுதல் விவரங்களுக்கு, கட்டுரைக்கு கீழே ஏற்றப்பட்ட முழுமையான குறியீட்டைப் பார்க்கவும்.

செயல்விளக்கம் / என்ன எதிர்பார்க்கலாம்

எல்லாம் அமைக்கப்பட்டு குறியீடு பதிவேற்றப்பட்டவுடன், Adafruit IO டாஷ்போர்டு மூலம் செய்யப்படும் வண்ண மாற்றங்களுக்கு RGB LED பதிலளிப்பதை நீங்கள் காண வேண்டும். சிவப்பு, பச்சை மற்றும் நீலத்திற்கான ஸ்லைடர்களை நீங்கள் சரிசெய்யும்போது, LED அதற்கேற்ப அதன் வண்ணத்தை மாற்ற வேண்டும். ஏதேனும் சிக்கல்களை எதிர்கொண்டால், Wi-Fi இணைப்பு நிலையானதாக இருப்பதையும், MQTT தலைப்புப் பெயர்கள் குறியீட்டில் வரையறுக்கப்பட்டவற்றுடன் (வீடியோவில் 17:30) பொருந்துவதையும் உறுதிசெய்யவும்.

பொதுவான தவறுகளில் தவறான வயரிங், பொருந்தாத தலைப்புப் பெயர்கள் மற்றும் சரியான Wi-Fi சான்றுகளை அமைக்க மறப்பது ஆகியவை அடங்கும். LED எரியவில்லை என்றால், மின்தடை இணைப்புகளை மீண்டும் சரிபார்த்து, ESP32 சரியாக மின்சாரம் பெறுவதை உறுதிசெய்யவும்.

வீடியோ நேரக்குறியீடுகள்

  • 00:00 தொடக்கம்
  • 2:23 திட்டத்திற்கான அறிமுகம்
  • 4:43 MQTT என்றால் என்ன
  • 7:55 Adafruit IO அமைப்பு
  • 14:09 வயரிங் விளக்கம்
  • 16:07 குறியீடு விளக்கம்
  • 27:03 Arduino IDE இல் ESP32 போர்டு மற்றும் COM போர்ட்டைத் தேர்ந்தெடுத்தல்
  • 29:12 திட்ட ஆர்ப்பாட்டம்
  • 31:25 RGB LED என்றால் என்ன?
  • 35:26 RGB வண்ணம்

படங்கள்

ESP32_rgb_pin
ESP32_rgb_pin
ESP32_RGB_led_wires
ESP32_RGB_led_wires
ES32-38_RGB_LED-wiring
ES32-38_RGB_LED-wiring
esp32-50-RGB-led
esp32-50-RGB-led
esp32-50-RGB-led-mqtt-main
esp32-50-RGB-led-mqtt-main
852-ESP32 Tutorial 50/55- Arduino code to control RGB LED using MQTT service of Adafruit
மொழி: C++
/***********************************************************************
 This is Arduino sketch for ESP32 to control RGB LED using MQTT service of Adafruit
 video instruction https://youtu.be/-9q1GfGsnr0
 📚⬇️ Download and resource page https://robojax.com/RJT672
 Written By Ahamd Shamshiri
 on Feb 18, 2024

  Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example

  

/// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

// Define PWM channels 
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;

// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;
int colorR, colorG, colorB;

#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/************************* WiFi Access Point *********************************/


#define WLAN_SSID "Book"
#define WLAN_PASS "888-888"

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER "io.adafruit.com"

// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883

// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY      "YOUR_ADAFRUIT_IO_KEY"

#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_NBQQ75Rn7liRNcRn5uGUBMsBYmjD"

/************ Global State (you don't need to change this!) ******************/

// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);


// io.adafruit.com root CA
const char* adafruitio_root_ca = \
      "-----BEGIN CERTIFICATE-----\n"
      "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
      "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
      "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
      "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
      "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
      "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
      "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
      "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
      "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
      "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
      "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
      "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
      "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
      "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
      "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
      "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
      "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
      "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
      "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
      "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
      "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
      "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
      "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
      "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
      "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
      "-----END CERTIFICATE-----\n";

/****************************** Feeds ***************************************/

// Setup a feed called 'test' for publishing and 'test2' for subscription.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe COLOR_R = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.red");
Adafruit_MQTT_Subscribe COLOR_G = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.green");
Adafruit_MQTT_Subscribe COLOR_B = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.blue");
Adafruit_MQTT_Subscribe COLOR_RGB = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/color-picker");


/*************************** Sketch Code ************************************/


void setup() {
  // Set up PWM channels
  ledcSetup(redChannel, freq, resolution);
  ledcSetup(greenChannel, freq, resolution);
  ledcSetup(blueChannel, freq, resolution);

  // Attach pins to corresponding PWM channels
  ledcAttachPin(redPin, redChannel);
  ledcAttachPin(greenPin, greenChannel);
  ledcAttachPin(bluePin, blueChannel);

  Serial.begin(115200);
  delay(10);

  Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));

  // Connect to WiFi access point.
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  delay(1000);

  WiFi.begin(WLAN_SSID, WLAN_PASS);
  delay(2000);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Set Adafruit IO's root CA
  client.setCACert(adafruitio_root_ca);

  // register callback for feed
  COLOR_R.setCallback(color_R_Callback);
  // Setup MQTT subscription for time feed.
  mqtt.subscribe(&COLOR_R);

    // register callback for feed
  COLOR_G.setCallback(color_G_Callback);
  // Setup MQTT subscription for time feed.
  mqtt.subscribe(&COLOR_G);

    // register callback for feed
  COLOR_B.setCallback(color_B_Callback);
  // Setup MQTT subscription for time feed.
  mqtt.subscribe(&COLOR_B);

    // register callback for feed
  COLOR_RGB.setCallback(color_RGB_Callback);
  // Setup MQTT subscription for time feed.
  mqtt.subscribe(&COLOR_RGB);


}

// uint32_t x=0;


void loop() {

  // Ensure the connection to the MQTT server is alive (this will make the first
  // connection and automatically reconnect when disconnected).  See the MQTT_connect
  // function definition further below.
  MQTT_connect();

  Serial.print("R: ");
  Serial.print (colorR);
  Serial.print(" G: ");
  Serial.print (colorG);
  Serial.print(" B: ");
  Serial.println(colorB);

  // wait 0.5 seconds for subscription messages
  mqtt.processPackets(500);
  setColor();

  // wait a couple seconds to avoid rate limit
  //delay(2000);
}

void color_R_Callback(char* message, uint16_t len) {
  char messageBuffer[40];
  //snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
  //Serial.println(messageBuffer);
  Serial.println(message);
  String inString = message;//sotre the message to String
 
  colorR  =  inString.toInt();//convert the message to Integer
  if(colorR >255 || colorR < 0)
  {
    colorR = 0;
  }
 
}

void color_G_Callback(char* message, uint16_t len) {
  char messageBuffer[40];
  //snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
  //Serial.println(messageBuffer);
  Serial.println(message);
  String inString = message;//sotre the message to String
 
  colorG  =  inString.toInt();//convert the message to Integer
  if(colorG >255 || colorG < 0)
  {
    colorG = 0;
  }
 
}

void color_B_Callback(char* message, uint16_t len) {
  char messageBuffer[40];
  //snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
  //Serial.println(messageBuffer);
  Serial.println(message);
  String inString = message;//sotre the message to String
 
  colorB  =  inString.toInt();//convert the message to Integer
  if(colorB >255 || colorB < 0)
  {
    colorB = 0;
  }
 
}

void color_RGB_Callback(char* message, uint16_t len) {
  char messageBuffer[40];
  //snprintf(messageBuffer, sizeof(messageBuffer), "Color status is :: %s, len :: %u", message, len);
  //Serial.println(messageBuffer);
  Serial.println(message);
  String newColor = String( message);//
  if(newColor.length() == 7)
  {
     
    String theColorR = newColor.substring(1, 3);//extract B2 from  #B2a48d for example
    String theColorG = newColor.substring(3, 5);//extract a4 from  #B2a48d for example
    String theColorB = newColor.substring(5, 7);//extract 8d from  #B2a48d for example
    
    colorR = StrToHex(theColorR.c_str());//convert String to HEX for R
    colorG = StrToHex(theColorG.c_str());//convert String to HEX for G
    colorB = StrToHex(theColorB.c_str());//convert String to HEX for B    


  }

 
}

//from https://stackoverflow.com/questions/44683071/convert-string-as-hex-to-hexadecimal
uint64_t StrToHex(const char* str)
{
  return (uint64_t) strtoull(str, 0, 16);
}

void setColor() {
  // For common-anode RGB LEDs, use 255 minus the color value
  ledcWrite(redChannel, colorR);
  ledcWrite(greenChannel, colorG);
  ledcWrite(blueChannel, colorB);
}


// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
  int8_t ret;
  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }
  Serial.print("Connecting to MQTT... ");
  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) {  // connect will return 0 for connected
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0) {
      // basically die and wait for WDT to reset me
      while (1)
        ;
    }
  }
  Serial.println("MQTT Connected!");
}

நீங்கள் தேவைப்படும் எண்ணங்கள்

வளங்கள் மற்றும் மேற்கோள்கள்

இன்னும் எந்த வளங்களும் இல்லை.

கோப்புகள்📁

தரவியல் அட்டவணை (பிடிஎப்)