Advertisement
ollim

MQTT Fernbedienung

Apr 29th, 2019
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>
  3. #include <WiFiClient.h>
  4. #include <ESP8266WebServer.h>
  5. #include <ESP8266mDNS.h>
  6. #include <ESP8266HTTPUpdateServer.h>
  7. #include <ArduinoJson.h>
  8. #include <Keypad.h>
  9.  
  10. ESP8266WebServer httpServer(80);
  11. ESP8266HTTPUpdateServer httpUpdater;
  12. WiFiClient espClient;
  13. PubSubClient client(espClient);
  14.  
  15. bool noidle = false;
  16. int idletime = 0;
  17. int red_led = 3;
  18. int green_led = 1;
  19. long lastMsg = 0;
  20. char msg[50];
  21. int value = 0;
  22. const char* host = "keypad-webupdate";
  23. const char* ssid = "SSID-DES-NETZWERKS";
  24. const char* password = "WPA2-SCHLÜSSEL-DES-NETZWERKS";
  25. const char* mqtt_server = "IP-ADRESSE.DES.MQTT.BROKERS";
  26. const char* mqtt_clientId = "keypad01";
  27. const char* mqtt_topic = "stat/keypad01/CMND";
  28. const char* mqtt_topic_voltage = "stat/keypad01/VOLTAGE";
  29. const char* mqtt_topic_ip = "stat/keypad01/IPADDRESS";
  30. const char* mqtt_intopic = "stat/keypad01/RECEIVE";
  31. const byte n_rows = 4;
  32. const byte n_cols = 4;
  33.  
  34. char keys[n_rows][n_cols] = {
  35.   {'1','2','3','A'},
  36.   {'4','5','6','B'},
  37.   {'7','8','9','C'},
  38.   {'*','0','#','D'}
  39. };
  40.  
  41. byte colPins[n_rows] = {D8, D4, D5, D3};
  42. byte rowPins[n_cols] = {D7, D6, D1, D2};
  43.  
  44. Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
  45.  
  46.  
  47. void local_yield()
  48. {
  49.   yield();
  50.   client.loop();
  51. }
  52.  
  53.  
  54. void local_delay(unsigned long millisecs)
  55. {
  56.   unsigned long start = millis();
  57.   local_yield();
  58.   if (millisecs > 0)
  59.   {
  60.     while ((millis()-start) < millisecs)
  61.     {
  62.       local_yield();
  63.     }
  64.   }
  65. }
  66.  
  67.  
  68. void setup_wifi() {
  69.   local_delay(10);
  70.   WiFi.begin(ssid, password);
  71.   while (WiFi.status() != WL_CONNECTED) {
  72.     local_delay(500);  
  73.   }
  74. }
  75.  
  76. void led_bootblink() {
  77.   digitalWrite(green_led, LOW);
  78.   digitalWrite(red_led, LOW);
  79.   local_delay(1000);
  80.   digitalWrite(green_led, HIGH);
  81.   digitalWrite(red_led, HIGH);  
  82. }
  83.  
  84.  
  85. void led_sleepblink() {
  86.     digitalWrite(green_led, LOW);
  87.     local_delay(250);
  88.     digitalWrite(green_led, HIGH);
  89.     local_delay(250);
  90.     digitalWrite(green_led, LOW);
  91.     local_delay(250);
  92.     digitalWrite(green_led, HIGH);
  93.     local_delay(250);
  94.     digitalWrite(red_led, LOW);
  95.     local_delay(1000);
  96.     digitalWrite(red_led, HIGH);  
  97. }
  98.  
  99.  
  100. void led_greenblink() {
  101.     digitalWrite(green_led, LOW);
  102.     local_delay(1000);
  103.     digitalWrite(green_led, HIGH);  
  104. }
  105.  
  106.  
  107. void led_redblink() {
  108.     digitalWrite(red_led, LOW);
  109.     local_delay(1000);
  110.     digitalWrite(red_led, HIGH);  
  111. }
  112.  
  113.  
  114. void led_greenshortblink() {
  115.   digitalWrite(green_led, LOW);
  116.   local_delay(150);
  117.   digitalWrite(green_led, HIGH);
  118.   local_delay(100);
  119.   digitalWrite(green_led, LOW);
  120.   local_delay(150);
  121.   digitalWrite(green_led, HIGH);
  122. }
  123.  
  124. void led_redshortblink() {
  125.   digitalWrite(red_led, LOW);
  126.   local_delay(150);
  127.   digitalWrite(red_led, HIGH);
  128.   local_delay(100);
  129.   digitalWrite(red_led, LOW);
  130.   local_delay(150);
  131.   digitalWrite(red_led, HIGH);
  132. }
  133.  
  134.  
  135. void callback(char* topic, byte* payload, unsigned int length) {
  136.   char message[length+1];
  137.    
  138.   for (int i = 0; i < length; i++) {
  139.     message[i] = (char)payload[i];
  140.   }
  141.   message[length] = '\0';
  142.   idletime = 0;
  143.  
  144.   if (strcmp(message,"ready")==0) {
  145.     led_greenshortblink();
  146.   }
  147.   else if (strcmp(message,"devon")==0) {
  148.     led_greenblink();
  149.   }
  150.   else if (strcmp(message,"devoff")==0) {
  151.     led_redblink();
  152.   }
  153.   else { led_redshortblink(); }
  154. }
  155.  
  156. void reconnect() {
  157.   while (!client.connected()) {
  158.     String clientId = "keypadClient-";
  159.     clientId += String(random(0xffff), HEX);
  160.     if (client.connect(clientId.c_str())) {
  161.       client.publish(mqtt_topic, "MQTT: connected");
  162.       int sensorValue = analogRead(A0);
  163.       float volts = sensorValue * (3.3 / 1023.0);
  164.       char voltage[5];
  165.       String str;
  166.       str=String(volts);
  167.       str.toCharArray(voltage,5);
  168.       client.publish(mqtt_topic_voltage, voltage);
  169.       String ipaddress = WiFi.localIP().toString();
  170.       char ipchar[ipaddress.length()+1];
  171.       ipaddress.toCharArray(ipchar,ipaddress.length()+1);
  172.       client.publish(mqtt_topic_ip, ipchar);
  173.       client.subscribe(mqtt_intopic);
  174.     } else {
  175.       local_delay(5000);
  176.     }
  177.   }
  178. }
  179.  
  180.  
  181. void handlenoidle() {
  182.   noidle = true;
  183.   httpServer.send(200, "text/plain", "Automatic deep sleep on idle deactivated! Please navigate to : " + WiFi.localIP().toString() + "/update to initialize an OTA-Update.");
  184.   digitalWrite(green_led, LOW);
  185. }
  186.  
  187.  
  188. void setup() {
  189.   pinMode(green_led, FUNCTION_3);
  190.   pinMode(green_led, OUTPUT);
  191.   pinMode(red_led, FUNCTION_3);
  192.   pinMode(red_led, OUTPUT);
  193.   digitalWrite(green_led, HIGH);
  194.   digitalWrite(red_led, HIGH);
  195.  
  196.   setup_wifi();
  197.  
  198.   client.setServer(mqtt_server, 1883);
  199.   client.setCallback(callback);
  200.   MDNS.begin(host);
  201.   httpUpdater.setup(&httpServer);
  202.   httpServer.begin();
  203.   MDNS.addService("http", "tcp", 80);
  204.  
  205.   httpServer.on("/noidle", handlenoidle);
  206.  
  207.   led_bootblink();
  208. }
  209.  
  210. void loop() {
  211.   httpServer.handleClient();
  212.  
  213.   if (!client.connected()) {
  214.     reconnect();
  215.   }
  216.   client.loop();
  217.   char myKey = myKeypad.getKey();
  218.   if (myKey != NULL){
  219.     idletime = 0;
  220.     String myKeySTR="";
  221.     myKeySTR=myKey;
  222.     myKeySTR.toCharArray(msg, 75);
  223.     client.publish(mqtt_topic, msg);
  224.   }
  225.   local_delay(10);
  226.   if (noidle == false) { idletime = idletime+1; }
  227.   if (idletime > 1000) {
  228.   led_sleepblink();
  229.   ESP.deepSleep(0);
  230.   }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement