Guest User

Untitled

a guest
Jul 19th, 2018
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.59 KB | None | 0 0
  1.  
  2.  
  3. #include <ESP8266WiFi.h>
  4. #include <PubSubClient.h>
  5. #include <EEPROM.h>
  6. #include <WiFiClient.h>
  7.  
  8. #define UART_BAUD 9600
  9. #define packTimeout 500 // ms (if nothing more on UART, then send packet)
  10. #define bufferSize 8192
  11.  
  12. #define MODE_STA // ESP connects to WiFi router
  13.  
  14. #define PROTOCOL_TCP
  15.  
  16. #ifdef MODE_STA
  17. //const char* ssid = "Хервамтам";
  18. //const char* pw =  "Хервамтам";
  19. const char *ssid = "Хервамтам";  // Your ROUTER SSID
  20. const char *pw = "Хервамтам"; // and WiFi PASSWORD
  21. IPAddress ip(10, 100, 100, 208); // From RoboRemo app, connect to this IP
  22. IPAddress netmask(255, 255, 255, 0);
  23. IPAddress gateway(10,100,100,103);
  24. const int port = 9876;
  25. #endif
  26.  
  27. //const int mqtt_port = 1993;
  28. const char* mqtt_server = "1.1.1.2"; // Имя сервера MQTT
  29. const int mqtt_port = 1883; // Порт для подключения к серверу MQTT
  30. const char* mqtt_user = "Хервамтам"; // Логи к серверу MQTT
  31. const char* mqtt_pass = "Хервамтам"; // Пароль к серверу MQTT
  32. const char* topic_name = "esp/kitchen/rgb"; // Название mqtt топика для передачи цвета
  33. const char* topic_s = "esp/kitchen/#"; // Название mqtt топика для передачи цвета
  34.  
  35. const int r = 15; // GIPO управления каналом цвета R
  36. const int g = 12; // GIPO управления каналом цвета R
  37. const int b = 13; // GIPO управления каналом цвета B
  38.  
  39. const int eprom_r = 0; // Область в памяти для R
  40. const int eprom_g = 1; // Область в памяти для G
  41. const int eprom_b = 2; // Область в памяти для B
  42.  
  43. int tm = 300;
  44. float temp = 0;
  45. int c_r = 0; // Текущий цвет R
  46. int c_g = 0; // Текущий цвет G
  47. int c_b = 0; // Текущий цвет B
  48.  
  49. #ifdef PROTOCOL_TCP
  50. WiFiClient wclient;
  51. PubSubClient client(wclient);
  52. WiFiServer server(port);
  53. #endif
  54.  
  55. uint8_t buf1[bufferSize];
  56. uint8_t i1=0;
  57.  
  58. uint8_t buf2[bufferSize];
  59. uint8_t i2=0;
  60.  
  61. void setup() {
  62.  
  63.     delay(500);
  64.  
  65.   Serial.begin(UART_BAUD);
  66.  
  67.     // Конфигурируем GPIO при старте
  68.   pinMode(r, OUTPUT);
  69.   pinMode(g, OUTPUT);
  70.   pinMode(b, OUTPUT);
  71.  
  72.   EEPROM.begin(4);
  73.   c_r = EEPROM.read(eprom_r);
  74.   c_g = EEPROM.read(eprom_g);
  75.   c_b = EEPROM.read(eprom_b);
  76.   EEPROM.commit();
  77.  
  78.   setColor();
  79.  
  80.   #ifdef MODE_STA
  81.   WiFi.mode(WIFI_STA);
  82.   WiFi.config(ip, gateway, netmask);
  83.   WiFi.begin(ssid, pw);
  84.   client.setServer(mqtt_server, mqtt_port);
  85.   client.setCallback(callback);
  86.   while (WiFi.status() != WL_CONNECTED) {
  87.     delay(2000);
  88.   //  Serial.println("wifion");
  89.   //  Serial.println(WiFi.localIP());
  90.   }
  91.   #endif
  92.    
  93.   #ifdef PROTOCOL_TCP
  94.  //Serial.println("Starting TCP Server");
  95.   server.begin(); // start TCP server
  96.   #endif
  97. }
  98.  
  99.  
  100. void callback(char* topic, byte* payload, unsigned int length) {
  101.   String topicStr = topic;
  102. //  Serial.println("Callback update.");
  103.  // Serial.print("Topic: ");
  104.  // Serial.println(topic);
  105.  
  106.   payload[length] = '\0';
  107.  // Serial.println((char*)payload);
  108.  
  109.   int number = (int) strtol((char*)payload, NULL, 16);
  110.  
  111.   // Split them up into r, g, b values
  112.   c_r = (number >> 16)*4;
  113.   c_g = (number >> 8 & 0xFF)*4;
  114.   c_b = (number & 0xFF)*4;
  115.  // c_r = c_r*4;
  116.  
  117.   //Serial.println(c_r);
  118.  // Serial.println(c_g);
  119.  // Serial.println(c_b);
  120.  
  121.    if (topicStr == topic_name)
  122.   {
  123.    // Serial.print("YaYks! ");
  124.        setColor();
  125.  
  126.       // Запишем новые цвета в память, что бы при следующем включении цвет был такой же
  127.       EEPROM.begin(4);
  128.       EEPROM.write(eprom_r, c_r);
  129.       EEPROM.write(eprom_g, c_g);
  130.       EEPROM.write(eprom_b, c_b);
  131.       EEPROM.commit();
  132.     } else {
  133.      // Serial.println("Fuck");
  134.     }
  135. }
  136.  
  137.  
  138. void reconnect() {
  139.   // Повторять пока нет MQTT соединения
  140.   while (!client.connected()) {
  141.   //  Serial.println("connecting ...");
  142.     // Попытка подключения к MQTT
  143.     if (client.connect("kitchenesp", mqtt_user, mqtt_pass)) {
  144.        // Подписываемся по топики (которые мы будем слушать от брокера)
  145.       client.subscribe(topic_s);
  146.    //   Serial.println("subscribed");
  147.     //  client.publish("esp/kitchen", "Hello from rgb led");
  148.     } else {
  149.     //  Serial.println("not_subscribed");
  150.       delay(50);
  151.     }
  152.   }
  153. }
  154.  
  155. void setColor()
  156. {
  157.   // Передадим значения на GPIO
  158.   analogWrite(r, c_r);
  159.   analogWrite(g, c_g);
  160.   analogWrite(b, c_b);
  161. }
  162.  
  163. void loop() {
  164.   if (!client.connected()) {
  165. reconnect();
  166. }
  167.  
  168. client.loop();
  169.  
  170.   if(!wclient.connected()) { // if client not connected
  171.     wclient = server.available(); // wait for it to connect
  172.     return;
  173.   }
  174.  
  175.   // here we have a connected client
  176.   #ifdef PROTOCOL_TCP
  177.   if(wclient.available()) {
  178.     while(wclient.available()) {
  179.       buf1[i1] = (uint8_t)wclient.read(); // read char from client (RoboRemo app)
  180.       if(i1<bufferSize-1) i1++;
  181.     }
  182.     // now send to UART:
  183.     Serial.write(buf1, i1);
  184.     i1 = 0;
  185.   }
  186.  
  187.   if(Serial.available()) {
  188.  
  189.     // read the data until pause:
  190.     while(1) {
  191.       if(Serial.available()) {
  192.         buf2[i2] = (char)Serial.read(); // read char from UART
  193.         if(i2<bufferSize-1) i2++;
  194.       } else {
  195.         //delayMicroseconds(packTimeoutMicros);
  196.         delay(packTimeout);
  197.         if(!Serial.available()) {
  198.           break;
  199.         }
  200.       }
  201.     }
  202.    
  203.     // now send to WiFi:
  204.     wclient.write((char*)buf2, i2);
  205.     i2 = 0;
  206.   }
  207. #endif
  208. }
Add Comment
Please, Sign In to add comment