Witam,
Mam problem z przerwaniem na ESP8266.
Chodzi o zrobienie układu podłączonego do WIFI oraz możliwie jak najszybciej (po naciśnięciu przycisku) wysyłającego komendę do serwera mqtt.
Chcę, aby po naciśnięciu przycisku wykonał się kawałek kodu jeden raz.
Tymczasem wykonuje się on kilka razy.
Czy wystarczy, jeśli użyje INPUT_PULLUP oraz kondensator pomiędzy stykami switcha?
Pin z ESP8266 podłączony switchem do GND i równolegle do styków switcha kondensator elektrolitowy.
Dziękuję za pomoc.
Mam problem z przerwaniem na ESP8266.
Chodzi o zrobienie układu podłączonego do WIFI oraz możliwie jak najszybciej (po naciśnięciu przycisku) wysyłającego komendę do serwera mqtt.
Chcę, aby po naciśnięciu przycisku wykonał się kawałek kodu jeden raz.
Tymczasem wykonuje się on kilka razy.
Czy wystarczy, jeśli użyje INPUT_PULLUP oraz kondensator pomiędzy stykami switcha?
Pin z ESP8266 podłączony switchem do GND i równolegle do styków switcha kondensator elektrolitowy.
Dziękuję za pomoc.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "XXX";
const char* password = "XXX";
const char* mqtt_server = "192.168.1.200"; //adres rpi na ktorym dziala mosquitto
const char* mqttUser = "mosquitto";
const char* mqttPassword = "mosquitto1";
const int mqttPort = 1883;
const int buttonPin = 2;
volatile byte buttonState = LOW;
unsigned long aktualnyCzas = 0;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
pinMode(buttonPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("----");
WiFi.begin( ssid, password );
while (WiFi.status() != WL_CONNECTED)
{
delay(1);
}
client.setServer(mqtt_server, mqttPort);
while (!client.connected())
{
if (client.connect("Przycisk2", mqttUser, mqttPassword ))
{
}
else
{
}
}
attachInterrupt(digitalPinToInterrupt(buttonPin), sendmqtt, FALLING);
}
void sendmqtt() {
buttonState = 1;
}
void loop() {
client.loop();
if (buttonState == 1)
{
detachInterrupt(buttonPin);
buttonState=0;
client.publish("ha/switch1", "ON");
aktualnyCzas = millis();
Serial.println(aktualnyCzas);
attachInterrupt(digitalPinToInterrupt(buttonPin), sendmqtt, FALLING);
}
}