Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement