nodemcu blocked for interrupts
Posted: Sat Jun 16, 2018 5:44 am
hi i have one problem with interrupt
who hel me?
who hel me?
Code: Select all
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Ticker.h>
/*Nome del dispositivo*/
#define NOME "TRTT18"
/* Parametri della rete Wifi */
const char* ssid = "xxxx";
const char* password = "xxxx";
/* Indirizzo del server MQTT */
const char* mqtt_server = "192.168.27.20";
const char* topic= "sensori";
/* Indirizzo Ip Statico assegnato al dispositivo */
IPAddress ip(192, 168, 27, 118);
IPAddress ipGw(192, 168, 27, 254);
IPAddress ipSubnet(255, 255, 255, 0);
IPAddress ipDns(8, 8, 8, 8);
char MyIp[16];
/* Definizione dei pin da controllare */
#define led 0
#define SWITCH_ONOFF 4
#define METRI 5
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);
pinMode(led, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
reconnect();
invia_status();
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() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Wifi Disconnessa");
Serial.println("Tentativo di riconnessione Alla rete Wifi");
setup_wifi();
reconnect();
}else{
if (!client.connected()) {
reconnect();
}
}
}
/*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");
digitalWrite(led, LOW);
} else {
strcat(msg, "1");
digitalWrite(led, HIGH);
//tempo1=millis();
}
/* Lo invio */
Serial.println(msg);
client.publish(topic, msg, true);
}
/* Invia il flag metri */
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
digitalWrite(led, LOW);
/* Lo invio */
Serial.println(msg);
client.publish(topic, msg, true);
}