Wa Koodu

Èkọ́ 46/55 ESP32 - Àtúnyẹ̀wò Ìwọ̀n Ooru Lọ́nà Jíjìn nípa lílo HiveMQ MQTT | Àkójọpọ̀ ESP32 ti SunFounder

Èkọ́ 46/55 ESP32 - Àtúnyẹ̀wò Ìwọ̀n Ooru Lọ́nà Jíjìn nípa lílo HiveMQ MQTT | Àkójọpọ̀ ESP32 ti SunFounder

Nínú ẹ̀kọ́ yìí, a óò ṣẹ̀dá ètò ìṣàkóso ìwọ̀n-otútù láti ọ̀nà jíjìn nípa lílo ESP32 àti ìlànà MQTT. Iṣẹ́ yìí gbà wá láyè láti tẹ̀ ìwọ̀n-otútù jáde sí olùpèsè MQTT kan àti láti darí LED kan láti ọ̀nà jíjìn nípa lílo ojú-ojú wẹ́bù kan. Nípa títẹ̀ bọ́tìnnì kan, a lè rán àwọn ìwọ̀n-otútù sí àwọsánmọ̀, a sì tún lè gba àwọn àṣẹ láti tan LED náà tàbí pa á.

esp32-47-mqt-1

ESP32 jẹ́ ẹ̀rọ-ìṣàkóso alágbára kan tí ó ní Wi-Fi àti Bluetooth nínú ara rẹ̀, tí ó mú un dára fún àwọn ohun èlò Internet of Things (IoT). Nínú ìtòlẹ́yọ̀ yìí, a óò lo thermistor NTC kan láti díwọ̀n otútù, bọ́tìnnì títẹ̀ kan láti mú àwọn ìwọ̀n jáde, àti LED kan láti fi ìpòlówó hàn. A óò fi àwọn ìwọ̀n náà rán sí HiveMQ, olùpèsè MQTT olókìkí kan, níbi tí a ti lè wọ̀ ọ́ wọlé láti ọ̀nà jíjìn (nínú fídíò ní 00:45).

esp32-47-mqt-2

Àlàyé Ohun Èlò

Fún iṣẹ́ yìí, a óò lo àwọn ẹ̀yà wọ̀nyí:

  • ESP32 Microcontroller: Bíọ́dù yìí ṣiṣẹ́ gẹ́gẹ́ bí ẹ̀yà àárín tí ń ṣiṣẹ́, tí ń bójú tó àwọn ìsopọ̀ Wi-Fi àti àwọn ìbánisọ̀rọ̀ MQTT.
  • NTC Thermistor: Ẹ̀rọ-ìwọ̀n-otútù yìí ń yí ìdènà rẹ̀ padà ní ìbámu pẹ̀lú otútù. Ó ń pèsè àmì analog kan tí ESP32 lè kà láti mọ otútù tí ó wà lọ́wọ́lọ́wọ́.
  • LED: Ẹ̀rọ-ìmọ́lẹ̀ yìí ni a óò lò láti fi ìpòlówó hàn ní ìbámu pẹ̀lú àwọn àṣẹ tí a gbà nípasẹ̀ MQTT.
  • Bọ́tìnnì Títẹ̀: Bọ́tìnnì yìí yóò mú ESP32 kà otútù náà kí ó sì tẹ̀ ẹ́ jáde sí olùpèsè MQTT.

Àwọn Àlàyé Datasheet

Olùṣe SunFounder
Nọ́mbà ẹ̀yà ESP32
Fóltì Logic/IO 3.3 V
Fóltì ìpèsè 5 V (nípasẹ̀ USB)
Ìwọ̀n-ìjàde (fún ikanni kọ̀ọ̀kan) 12 mA tó pọ̀jù
Ìtọ́sọ́nà ìgbohùnsáfẹ́fẹ́ PWM Títí di 40 kHz
Àwọn ìpele ìwọ̀n-ìkólogi 0.3 V (rẹ̀lẹ̀), 2.4 V (ga)
Àwọn ìwọ̀n-ìgbóná -40 sí 85 °C
Ìpako ESP32-WROOM-32

 

  • Rí i dájú pé àwọn ìpele fóltì tọ́ láti yẹra fún ìbàjẹ́.
  • Lo àwọn resistor ìfà-sókè fún bọ́tìnnì títẹ̀ náà láti rí i dájú pé àwọn ìwọ̀n dúró ṣinṣin.
  • Àwọn capacitor ìyàsọ́tọ̀ lè ran lọ́wọ́ láti mú ìpèsè agbára dúró ṣinṣin.
  • Ṣọ́ra pẹ̀lú ìsopọ̀ thermistor náà láti yẹra fún àwọn ìwọ̀n tí kò tọ́.
  • Rí i dájú pé àwọn àlàyé olùpèsè MQTT rẹ tọ́ fún ìsopọ̀ àṣeyọrí.

Àwọn Ìtọ́sọ́nà Ìsopọ̀

esp32-47-mqtt-wiring

Láti so àwọn ẹ̀yà pọ̀, bẹ̀rẹ̀ nípa sísopọ̀ thermistor NTC náà. So ọ̀kan nínú àwọn ẹsẹ̀ thermistor náà sí ìpèsè 3.3 V lórí ESP32. Ẹsẹ̀ kejì so sí pin 36 lórí ESP32, ó sì yẹ kí ó tún so sí resistor 10 kΩ kan, tí a óò sì so èyí sí ilẹ̀. Èyí dá ìpín-ìmú-fóltì kan tí ó jẹ́ kí ESP32 kà ìdènà thermistor náà.

Nígbà tí ó tẹ̀ síwájú, so LED náà. Ẹsẹ̀ gígùn (anode) ti LED náà so sí pin 4 lórí ESP32 nípasẹ̀ resistor 220 Ω kan, nígbà tí ẹsẹ̀ kúkúrú (cathode) so sí ilẹ̀. Fún bọ́tìnnì títẹ̀ náà, so ẹ̀gbẹ́ kan sí 3.3 V àti ẹ̀gbẹ́ kejì sí pin 14 lórí ESP32. Ní àfikún, so resistor 10 kΩ kan láti pin bọ́tìnnì náà sí ilẹ̀ láti rí i dájú pé ìpòlówó LOW dúró ṣinṣin nígbà tí a kò tẹ bọ́tìnnì náà.

Fi Ìkàwé Tí A Nílò Sọ̀rọ̀

Ìkàwé PubSubClient ni a lò níbí, o lè fi í sílẹ̀ láti inú Library Manager.

esp32-47-mqtt-library

Àwọn Àpẹẹrẹ Kóòdù & Ìtọ́sọ́nà

Nínú ìtòlẹ́yọ̀ náà, a bẹ̀rẹ̀ ìbánisọ̀rọ̀ serial, a ṣètò ìsopọ̀ Wi-Fi, a sì ṣètò olùpèsè MQTT. Èyí ni àpẹẹrẹ kóòdù ìtòlẹ́yọ̀:

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

Apá kóòdù yìí dá ìsopọ̀ sí nẹ́tíwọọkì Wi-Fi àti ṣètò olùpèsè MQTT. Àwọn ìpòlówó pin fún bọ́tìnnì àti LED ni a tún ṣètò níbí.

Ìṣiṣẹ́ loop ń ṣàyẹ̀wò ìpòlówó bọ́tìnnì nígbà gbogbo, ó sì ń tẹ̀ ìwọ̀n-otútù jáde nígbà tí a bá tẹ ẹ́. Èyí ni àyọkà kan láti inú loop:

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  if (digitalRead(buttonPin)) {
    long now = millis();
    if (now - lastMsg > 5000) {
      lastMsg = now;
      char tempString[8];
      dtostrf(thermistor(), 1, 2, tempString);
      client.publish("SF/TEMP", tempString);
    }
  }
}

Nínú loop yìí, a ṣàyẹ̀wò bí ESP32 bá ti sopọ̀ sí olùpèsè MQTT. Bí a bá tẹ bọ́tìnnì náà, ó kà otútù láti inú thermistor, ó sì tẹ̀ ẹ́ jáde sí kókó-ọ̀rọ̀ "SF/TEMP" ní gbogbo ìṣẹ́jú àáyá 5.

Ìfihàn / Ohun Tí O Lè Retí

Nígbàtí a ṣètò iṣẹ́ náà tí ó sì ń ṣiṣẹ́, títẹ bọ́tìì náà yóò tẹ̀ jáde ìwọ̀n otútù lọ́wọ́lọ́wọ́ sí olùpín MQTT. O lè ṣàkíyèsí data yìí láti ọ̀dọ̀ olùpín MQTT èyíkéyìí. Ní àfikún, o lè fi àwọn ifiranṣẹ́ ránṣẹ́ láti ṣàkóso LED; fífi "on" ránṣẹ́ yóò mú un tàn, nígbàtí "off" yóò pa á. Wò fún ìwà tí a retí nínú fídíò ní 15:30, níbi tí a ti fi àwọn ìwọ̀n otútù hàn lẹ́yìn títẹ bọ́tìì kọ̀ọ̀kan.

Àwọn Àkókò Fídíò

  • 00:00 Ìbẹ̀rẹ̀
  • 2:05 Ìfihàn sí iṣẹ́ náà
  • 7:06 Iṣẹ́ HiveMQ Ọ̀fẹ́
  • 7:56 Àlàyé nípa ìsopọ̀ oníná
  • 11:11 Àlàyé kóòdù Arduino
  • 18:46 Yíyan bọ́ọ̀dù ESP32 àti ibùdó COM nínú Arduino IDE
  • 20:30 Ìfihàn olùpín HiveMQ Free

Aworan

esp32-47-mqt-1
esp32-47-mqt-1
esp32-47-mqt-2
esp32-47-mqt-2
esp32-47-mqtt-library
esp32-47-mqtt-library
esp32-47-mqtt-wiring
esp32-47-mqtt-wiring
847-ESP32 Tutorial 46/55- Arduino code for IoT Communication with MQTT
Ede: C++
/*********
  :ref: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
  https://docs.sunfounder.com/projects/kepler-kit/en/latest/iotproject/5.mqtt_pub.html
*********/

#include <WiFi.h>
#include <PubSubClient.h>
//#include <Wire.h>

// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";

// Add your MQTT Broker address, example:
const char* mqtt_server = "broker.hivemq.com";
const char* unique_identifier = "sunfounder-client-sdgvsda";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
int value = 0;


// LED Pin
const int ledPin = 4;
const int buttonPin = 14;

// When you connect to WIFI, only 36 39 34 35 32 33 pins can be used for analog reading.
// Define constants
const int thermistorPin = 36; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // Resistance value (10k)
const float beta = 3950; // Beta value (Typical Value)
const float nominalTemperature = 25; // Nominal temperature for calculating the temperature coefficient
const float nominalResistance = 10000; // Resistance value at nominal temperature



void setup() {
  Serial.begin(115200);

  // default settings
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

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

void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;

  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();

  // If a message is received on the topic "SF/LED", you check if the message is either "on" or "off".
  // Changes the output state according to the message
  if (String(topic) == "SF/LED") {
    Serial.print("Changing state to ");
    if (messageTemp == "on") {
      Serial.println("on");
      digitalWrite(ledPin, HIGH);
    } else if (messageTemp == "off") {
      Serial.println("off");
      digitalWrite(ledPin, LOW);
    }
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect(unique_identifier)) {
      Serial.println("connected");
      // Subscribe
      client.subscribe("SF/LED");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

float thermistor() {
  int adcValue = analogRead(thermistorPin); // Read ADC value
  float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance with updated configuration

  // Calculate temperature using the Beta parameter equation
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
  
  float tempC = tempK - 273.15; // Get temperature in Celsius
  float tempF = 1.8 * tempC + 32.0; // Get temperature in Fahrenheit

  //Print temperature
  Serial.print("Temp: ");
  Serial.println(tempC);
  delay(200); //wait for 200 milliseconds
  return tempC;
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // if the button pressed, publish the temperature to topic "SF/TEMP"
  if (digitalRead(buttonPin)) {
    long now = millis();
    if (now - lastMsg > 5000) {
      lastMsg = now;
      char tempString[8];
      dtostrf(thermistor(), 1, 2, tempString);
      client.publish("SF/TEMP", tempString);
    }
  }
}

Orisun & itọkasi

Fáìlìs📁

Ko si awọn faili ti o wa.