Advertisement
Fadhli1109

ML 8511 with mqtt

Jun 13th, 2023 (edited)
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*********
  2.   Fadhli.
  3.   ******/
  4.  
  5. #include <Arduino.h>
  6. #include <WiFi.h>
  7. extern "C" {
  8.   #include "freertos/FreeRTOS.h"
  9.   #include "freertos/timers.h"
  10. }
  11. #include <AsyncMqttClient.h>
  12.  
  13. #include "max6675.h"
  14.  
  15.  
  16. #define WIFI_SSID "FDL"
  17. #define WIFI_PASSWORD "Jiancok717273"
  18.  
  19. #define MQTT_HOST IPAddress(192, 168, 1, 102)
  20.  
  21. #define MQTT_PORT 1883
  22. #define BROKER_USER "fadhli"
  23. #define BROKER_PASS "1234"
  24.  
  25.  
  26. #define MQTT_PUB_TEMP"esp/max6675/temperature"
  27.  
  28. int thermoDO = 19;
  29. int thermoCS = 23;
  30. int thermoCLK = 5;
  31.  
  32. MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
  33.  
  34.  
  35.  
  36. // Variables to hold sensor readings
  37. float TEMP;
  38.  
  39.  
  40.  
  41. AsyncMqttClient mqttClient;
  42. TimerHandle_t mqttReconnectTimer;
  43. TimerHandle_t wifiReconnectTimer;
  44.  
  45. unsigned long previousMillis = 0;   // Stores last time a message was published
  46. const long interval = 10000;        // Interval at which to publish values
  47.  
  48. void connectToWifi() {
  49.   Serial.println("Connecting to Wi-Fi...");
  50.   WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  51. }
  52.  
  53. void connectToMqtt() {
  54.   Serial.println("Connecting to MQTT...");
  55.   mqttClient.connect();
  56. }
  57.  
  58. void WiFiEvent(WiFiEvent_t event) {
  59.   Serial.printf("[WiFi-event] event: %d\n", event);
  60.   switch(event) {
  61.     case SYSTEM_EVENT_STA_GOT_IP:
  62.       Serial.println("WiFi connected");
  63.       Serial.println("IP address: ");
  64.       Serial.println(WiFi.localIP());
  65.       connectToMqtt();
  66.       break;
  67.     case SYSTEM_EVENT_STA_DISCONNECTED:
  68.       Serial.println("WiFi lost connection");
  69.       xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
  70.       xTimerStart(wifiReconnectTimer, 0);
  71.       break;
  72.   }
  73. }
  74.  
  75. void onMqttConnect(bool sessionPresent) {
  76.   Serial.println("Connected to MQTT.");
  77.   Serial.print("Session present: ");
  78.   Serial.println(sessionPresent);
  79. }
  80.  
  81. void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
  82.   Serial.println("Disconnected from MQTT.");
  83.  
  84.   if (WiFi.isConnected()) {
  85.     xTimerStart(mqttReconnectTimer, 0);
  86.   }
  87. }
  88.  
  89. void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
  90.   Serial.println("Subscribe acknowledged.");
  91.   Serial.print("  packetId: ");
  92.   Serial.println(packetId);
  93.   Serial.print("  qos: ");
  94.   Serial.println(qos);
  95. }
  96.  
  97. void onMqttUnsubscribe(uint16_t packetId) {
  98.   Serial.println("Unsubscribe acknowledged.");
  99.   Serial.print("  packetId: ");
  100.   Serial.println(packetId);
  101. }
  102.  
  103. void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
  104.   // Do whatever you want when you receive a message
  105.   Serial.println("Publish received.");
  106.   Serial.print("  topic: ");
  107.   Serial.println(topic);
  108.   Serial.print("  qos: ");
  109.   Serial.println(properties.qos);
  110.   Serial.print("  dup: ");
  111.   Serial.println(properties.dup);
  112.   Serial.print("  retain: ");
  113.   Serial.println(properties.retain);
  114.   Serial.print("  len: ");
  115.   Serial.println(len);
  116.   Serial.print("  index: ");
  117.   Serial.println(index);
  118.   Serial.print("  total: ");
  119.   Serial.println(total);
  120. }
  121.  
  122. void onMqttPublish(uint16_t packetId) {
  123.   Serial.println("Publish acknowledged.");
  124.   Serial.print("  packetId: ");
  125.   Serial.println(packetId);
  126. }
  127.  
  128. void setup() {
  129.   Serial.begin(9600);
  130.  
  131.  Serial.println("MAX6675 test");
  132.   // wait for MAX chip to stabilize
  133.     delay(500);
  134.  
  135.  
  136.   mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToMqtt));
  137.   wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToWifi));
  138.  
  139.   WiFi.onEvent(WiFiEvent);
  140.  
  141.   mqttClient.onConnect(onMqttConnect);
  142.   mqttClient.onDisconnect(onMqttDisconnect);
  143.   mqttClient.onSubscribe(onMqttSubscribe);
  144.   mqttClient.onUnsubscribe(onMqttUnsubscribe);
  145.   mqttClient.onMessage(onMqttMessage);
  146.   mqttClient.onPublish(onMqttPublish);
  147.   mqttClient.setServer(MQTT_HOST, MQTT_PORT);
  148.   mqttClient.setCredentials(BROKER_USER, BROKER_PASS);
  149.  
  150.  
  151.   connectToWifi();
  152.  }
  153.  
  154. void loop() {
  155.  unsigned long currentMillis = millis();
  156.  if (currentMillis - previousMillis >= interval) {
  157.   previousMillis = currentMillis;
  158.  }
  159.  
  160.    
  161.   Serial.print("C = ");
  162.   Serial.println(thermocouple.readCelsius());
  163.  
  164.  
  165.   TEMP = thermocouple.readCelsius();
  166.  
  167.   // For the MAX6675 to update, you must delay AT LEAST 250ms between reads!
  168.  
  169.     delay(1000);
  170.  
  171.    
  172.     uint16_t packetIdPub3 = mqttClient.publish(MQTT_PUB_TEMP, 1, true, String(TEMP).c_str());                            
  173.     Serial.printf("Publishing on topic %s at QoS 1, packetId: %i", MQTT_PUB_TEMP, packetIdPub3);
  174.     Serial.printf("Message: %.2f \n", TEMP);
  175.  
  176.  
  177.    
  178.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement