Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- #include <Ticker.h>
- /*Nome del dispositivo*/
- #define NOME "TRTT17"
- /* Parametri della rete Wifi */
- const char* ssid = "mario studio";
- const char* password = "mario1967";
- /* Indirizzo del server MQTT */
- //const char* mqtt_server = "192.168.20.75";
- const char* mqtt_server = "192.168.1.110";
- const char* topic= "sensori";
- /* Indirizzo Ip Statico assegnato al dispositivo */
- IPAddress ip(192, 168, 1, 200);
- IPAddress ipGw(192, 168, 1, 254);
- IPAddress ipSubnet(255, 255, 255, 0);
- IPAddress ipDns(8, 8, 8, 8);
- char MyIp[16];
- /* Definizione dei pin da controllare */
- #define SWITCH_ONOFF 5
- #define METRI 4
- WiFiClient espClient;
- PubSubClient client(espClient);
- Ticker MyTiket;
- void setup()
- {
- /* Abilito l'interrupt per contare il numero dei giri effettuati */
- /* Sul fronte di discesa */
- /* LOW Scatta quando il pin รจ Basso */
- /* CHANGE Scatta sul cambiamento di stato */
- /* RISING Scatta quando da basso va alto */
- /* FALLING Scatta quando da alto va basso */
- pinMode(METRI, INPUT_PULLUP);
- pinMode(SWITCH_ONOFF, INPUT_PULLUP);
- Serial.begin(115200);
- setup_wifi();
- client.setServer(mqtt_server, 1883);
- reconnect();
- invia_status();
- //questo credo sia il punto che mi manda in tilt tutto..perche levando l'interrupt e mandando solo il tempo funziona
- attachInterrupt(digitalPinToInterrupt(METRI), invia_metri, FALLING );
- // attachInterrupt(digitalPinToInterrupt(SWITCH_ONOFF), invia_status, CHANGE );
- MyTiket.attach(1, invia_status);
- }
- /* Funzione di connessione alla rete Wifi */
- void setup_wifi() {
- String SIp;
- IPAddress Ip;
- delay(10);
- // We start by connecting to a WiFi network
- Serial.println();
- Serial.print("Connecting to ");
- Serial.println(ssid);
- // WiFi.config(ip, ipDns, ipGw, ipSubnet); //Commentare questa riga se si vuole che l'indirizzo Ip sia assegnato dal DHCP
- WiFi.begin(ssid, password); //Connessione alla Wifi
- /* Attendo la connessione Wifi */
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- /* Salvo l'indirizzo IP */
- Ip = WiFi.localIP();
- SIp = IpAddress2String(Ip);
- SIp.toCharArray(MyIp, SIp.length() + 1);
- }
- /* Converte IPAddress In Char */
- String IpAddress2String(const IPAddress& ipAddress)
- {
- return String(ipAddress[0]) + String(".") + \
- String(ipAddress[1]) + String(".") + \
- String(ipAddress[2]) + String(".") + \
- String(ipAddress[3]) ;
- }
- /* Connessione al server MQTT */
- void reconnect() {
- // Loop until we're reconnected
- while (!client.connected()) {
- Serial.println("Tentativo di connessione al server MQTT...");
- // Attempt to connect
- if (client.connect(MyIp)) {
- Serial.print("Server MQTT Connesso Id : ");
- Serial.println(MyIp);
- // ...resubscribe
- client.subscribe("inTopic");
- } else {
- Serial.print("Connessione fallita, rc=");
- Serial.print(client.state());
- Serial.println(" riprovo tra 5 secondi ");
- // Wait 5 seconds before retrying
- delay(5000);
- }
- }
- }
- void loop() {
- }
- /*Invia lo stato ON/OFF */
- void invia_status() {
- int status_onoff;
- char msg[50];
- /* Compongo il messaggio */
- status_onoff = digitalRead(SWITCH_ONOFF); //Leggo lo stato
- msg[0] = '\0';
- strcpy(msg, "TIME"); //Identificatore del tipo di messaggio
- strcat(msg, "|"); //Separatore
- strcat(msg, NOME); //Nome del dispositivo
- strcat(msg, "|"); //Separatore
- strcat(msg, MyIp); //Indirizzo IP del dispositivo
- strcat(msg, "|"); //Separatore
- if (status_onoff == LOW) { //Stato macchina
- strcat(msg, "0");
- } else {
- strcat(msg, "1");
- }
- /* Lo invio */
- Serial.println(msg);
- client.publish(topic, msg);
- }
- /* Invia il flag metri ma nn lo uso era una prova */
- void invia_metri() {
- char msg[50];
- msg[0] = '\0';
- strcpy(msg, "METERS"); //Identificatore del tipo di messaggio
- strcat(msg, "|"); //Separatore
- strcat(msg, NOME); //Nome del dispositivo
- strcat(msg, "|"); //Separatore
- strcat(msg, MyIp); //Indirizzo IP del dispositivo
- strcat(msg, "|"); //Separatore
- strcat(msg, "1"); //Indica un giro completo
- /* Lo invio */
- Serial.println(msg);
- client.publish(topic, msg);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement