Advertisement
marioarmillei1967

Untitled

Jun 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.71 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>
  3. #include <Ticker.h>
  4.  
  5. /*Nome del dispositivo*/
  6. #define NOME "TRTT17"
  7.  
  8. /* Parametri della rete Wifi */
  9.  
  10. const char* ssid = "mario studio";
  11. const char* password = "mario1967";
  12. /* Indirizzo del server MQTT */
  13. //const char* mqtt_server = "192.168.20.75";
  14. const char* mqtt_server = "192.168.1.110";
  15. const char* topic= "sensori";
  16.  
  17. /* Indirizzo Ip Statico assegnato al dispositivo */
  18. IPAddress ip(192, 168, 1, 200);
  19. IPAddress ipGw(192, 168, 1, 254);
  20. IPAddress ipSubnet(255, 255, 255, 0);
  21. IPAddress ipDns(8, 8, 8, 8);
  22.  
  23.  
  24. char MyIp[16];
  25.  
  26. /* Definizione dei pin da controllare */
  27. #define SWITCH_ONOFF 5
  28. #define METRI 4
  29.  
  30.  
  31. WiFiClient espClient;
  32. PubSubClient client(espClient);
  33. Ticker MyTiket;
  34.  
  35. void setup()
  36. {
  37.  
  38.  
  39. /* Abilito l'interrupt per contare il numero dei giri effettuati */
  40. /* Sul fronte di discesa */
  41. /* LOW Scatta quando il pin รจ Basso */
  42. /* CHANGE Scatta sul cambiamento di stato */
  43. /* RISING Scatta quando da basso va alto */
  44. /* FALLING Scatta quando da alto va basso */
  45.  
  46.  
  47. pinMode(METRI, INPUT_PULLUP);
  48. pinMode(SWITCH_ONOFF, INPUT_PULLUP);
  49.  
  50. Serial.begin(115200);
  51. setup_wifi();
  52. client.setServer(mqtt_server, 1883);
  53. reconnect();
  54. invia_status();
  55.  
  56. //questo credo sia il punto che mi manda in tilt tutto..perche levando l'interrupt e mandando solo il tempo funziona
  57. attachInterrupt(digitalPinToInterrupt(METRI), invia_metri, FALLING );
  58. // attachInterrupt(digitalPinToInterrupt(SWITCH_ONOFF), invia_status, CHANGE );
  59. MyTiket.attach(1, invia_status);
  60.  
  61. }
  62.  
  63. /* Funzione di connessione alla rete Wifi */
  64. void setup_wifi() {
  65.  
  66. String SIp;
  67. IPAddress Ip;
  68.  
  69. delay(10);
  70. // We start by connecting to a WiFi network
  71. Serial.println();
  72. Serial.print("Connecting to ");
  73. Serial.println(ssid);
  74. // WiFi.config(ip, ipDns, ipGw, ipSubnet); //Commentare questa riga se si vuole che l'indirizzo Ip sia assegnato dal DHCP
  75. WiFi.begin(ssid, password); //Connessione alla Wifi
  76.  
  77. /* Attendo la connessione Wifi */
  78. while (WiFi.status() != WL_CONNECTED) {
  79. delay(500);
  80. Serial.print(".");
  81. }
  82.  
  83. Serial.println("");
  84. Serial.println("WiFi connected");
  85. Serial.println("IP address: ");
  86. Serial.println(WiFi.localIP());
  87.  
  88. /* Salvo l'indirizzo IP */
  89. Ip = WiFi.localIP();
  90. SIp = IpAddress2String(Ip);
  91. SIp.toCharArray(MyIp, SIp.length() + 1);
  92.  
  93. }
  94.  
  95. /* Converte IPAddress In Char */
  96. String IpAddress2String(const IPAddress& ipAddress)
  97. {
  98. return String(ipAddress[0]) + String(".") + \
  99. String(ipAddress[1]) + String(".") + \
  100. String(ipAddress[2]) + String(".") + \
  101. String(ipAddress[3]) ;
  102. }
  103.  
  104.  
  105.  
  106. /* Connessione al server MQTT */
  107. void reconnect() {
  108. // Loop until we're reconnected
  109. while (!client.connected()) {
  110. Serial.println("Tentativo di connessione al server MQTT...");
  111. // Attempt to connect
  112. if (client.connect(MyIp)) {
  113. Serial.print("Server MQTT Connesso Id : ");
  114. Serial.println(MyIp);
  115.  
  116. // ...resubscribe
  117. client.subscribe("inTopic");
  118. } else {
  119. Serial.print("Connessione fallita, rc=");
  120. Serial.print(client.state());
  121. Serial.println(" riprovo tra 5 secondi ");
  122. // Wait 5 seconds before retrying
  123. delay(5000);
  124. }
  125. }
  126. }
  127.  
  128. void loop() {
  129.  
  130.  
  131.  
  132.  
  133. }
  134.  
  135. /*Invia lo stato ON/OFF */
  136. void invia_status() {
  137.  
  138. int status_onoff;
  139. char msg[50];
  140.  
  141. /* Compongo il messaggio */
  142. status_onoff = digitalRead(SWITCH_ONOFF); //Leggo lo stato
  143. msg[0] = '\0';
  144. strcpy(msg, "TIME"); //Identificatore del tipo di messaggio
  145. strcat(msg, "|"); //Separatore
  146. strcat(msg, NOME); //Nome del dispositivo
  147. strcat(msg, "|"); //Separatore
  148. strcat(msg, MyIp); //Indirizzo IP del dispositivo
  149. strcat(msg, "|"); //Separatore
  150. if (status_onoff == LOW) { //Stato macchina
  151. strcat(msg, "0");
  152. } else {
  153. strcat(msg, "1");
  154. }
  155. /* Lo invio */
  156. Serial.println(msg);
  157. client.publish(topic, msg);
  158.  
  159. }
  160.  
  161. /* Invia il flag metri ma nn lo uso era una prova */
  162. void invia_metri() {
  163.  
  164. char msg[50];
  165. msg[0] = '\0';
  166. strcpy(msg, "METERS"); //Identificatore del tipo di messaggio
  167. strcat(msg, "|"); //Separatore
  168. strcat(msg, NOME); //Nome del dispositivo
  169. strcat(msg, "|"); //Separatore
  170. strcat(msg, MyIp); //Indirizzo IP del dispositivo
  171. strcat(msg, "|"); //Separatore
  172. strcat(msg, "1"); //Indica un giro completo
  173.  
  174. /* Lo invio */
  175. Serial.println(msg);
  176. client.publish(topic, msg);
  177.  
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement