Advertisement
nkrisz5

BEAGY_DEMO_1

Nov 22nd, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>
  3.  
  4. #define ledPinRed D1
  5. #define ledPinGreen D2
  6. #define potPin A0
  7. #define button D6
  8.  
  9. int buttonState = 0;
  10. int lastButtonState = 0;
  11.  
  12. int potmeterValue = 0;
  13. long lastMsg = 0;
  14.  
  15. //WIFI adatok
  16. const char* ssid = "beagy_labor";
  17. const char* password = "12345678";
  18. //MQTT szerver IP címe
  19. const char* mqtt_server = "192.168.0.100";
  20. //Wifi kliens
  21. WiFiClient espClient;
  22. //MQTT-t megvalósító kliens
  23. PubSubClient client(espClient);
  24.  
  25. //A Yolobor1 helyére egyedi ID-t írjatok be!
  26. String clientId = "Yolobor1";
  27.  
  28. //WIFI-re csatlakozás
  29. void setup_wifi() {
  30.  
  31.   delay(10);  
  32.   Serial.println();
  33.   Serial.print("Connecting to ");
  34.   Serial.println(ssid);
  35.  
  36.   WiFi.begin(ssid, password);
  37.  
  38.   while (WiFi.status() != WL_CONNECTED) {
  39.     delay(500);
  40.     Serial.print(".");
  41.   }
  42.  
  43.   randomSeed(micros());
  44.  
  45.   Serial.println("");
  46.   Serial.println("WiFi connected");
  47.   Serial.println("IP address: ");
  48.   Serial.println(WiFi.localIP());
  49. }
  50.  
  51. //Üzenet kezelő függvény
  52. void callback(char* topic_in, byte* payload, unsigned int length) {  
  53.  
  54.   //Üzenet char* ból Stringbe konvertálása
  55.   String message = "";
  56.   for (int i = 0; i < length; i++) {
  57.     message += (char)payload[i];
  58.   }
  59.  
  60.   //Topic char* hosszának meghatározása
  61.   int k = 0;
  62.   while((char)topic_in[k] != '\0'){
  63.     k++;
  64.   }
  65.  
  66.   //Topic char* ból Stringbe konvertálása
  67.   String topic = "";
  68.   for (int i = 0; i < k; i++) {
  69.     topic += (char)topic_in[i];
  70.   }
  71.  
  72.   Serial.print("Topic: ");
  73.   Serial.println(topic);
  74.   Serial.print("Message: ");
  75.   Serial.println(message);
  76.   Serial.println();
  77.  
  78.   if(topic == "root/error"){
  79.     errorHandle(message);    
  80.   }
  81. }
  82.  
  83. //root/error topicba érkező üzenet kezelő
  84. void errorHandle(String message){
  85.     if(message == "stop"){
  86.         digitalWrite(ledPinRed, HIGH);
  87.         digitalWrite(ledPinGreen, LOW);
  88.       }
  89.       else if(message == "continue") {
  90.         digitalWrite(ledPinRed, LOW);
  91.         digitalWrite(ledPinGreen, HIGH);
  92.       }
  93. }
  94.  
  95. //Connect és reconnect az MQTT szerverre.
  96. void reconnect() {
  97.   // Loop ameddig nem csatlakoztunk
  98.   while (!client.connected()) {
  99.     Serial.print("Attempting MQTT connection...");
  100.    
  101.     // Csatlakozás próbálkozás
  102.     // .c_str() átalakítás Stringből!!!
  103.     if (client.connect(clientId.c_str())) {
  104.       Serial.println("connected");
  105.      
  106.       // Miután csatlakozott      
  107.       client.subscribe("root/error");
  108.      
  109.     }
  110.     else {
  111.       //rc => return code
  112.       Serial.print("failed, rc=");
  113.       Serial.print(client.state());
  114.       Serial.println(" try again in 5 seconds");
  115.      
  116.       delay(5000);
  117.     }
  118.   }
  119. }
  120.  
  121. void setup() {
  122.  
  123.   Serial.begin(115200);
  124.  
  125.   //Wifire csatlakozás
  126.   setup_wifi();
  127.  
  128.   //MQTT kliens beállítások
  129.   client.setServer(mqtt_server, 1883);
  130.   client.setCallback(callback);
  131.  
  132.   //Alapállapot beállítása
  133.   pinMode(ledPinRed, OUTPUT);
  134.   pinMode(ledPinGreen, OUTPUT);
  135.   digitalWrite(ledPinRed, LOW);
  136.   digitalWrite(ledPinGreen, HIGH);
  137. }
  138.  
  139. void loop() {
  140.  
  141.   //MQTT kapcsolat fentartása
  142.   if (!client.connected()) {
  143.     reconnect();
  144.   }
  145.   client.loop();
  146.  
  147.   //Potmeter, error szimulálására
  148.   long now = millis();
  149.   if (now - lastMsg > 2000) {
  150.     lastMsg = now;
  151.     potmeterValue = analogRead(potPin);
  152.     Serial.println(potmeterValue);
  153.    
  154.     if(potmeterValue < 50) {
  155.     client.publish("root/error", "stop");
  156.     }
  157.   }
  158.  
  159.   //Gomb
  160.   buttonState = digitalRead(button);
  161.  
  162.   //Prellmentesítés
  163.   if (buttonState != lastButtonState) {
  164.     if(buttonState == HIGH) {
  165.       //RANDOM ÜZENET szabadon választható
  166.       client.publish("root/servermsg", (clientId + " RANDOM ÜZENET").c_str());
  167.     }
  168.     delay(50);
  169.     lastButtonState = buttonState;
  170.   }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement