Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- #include <WiFiClient.h>
- #include <ESP8266WebServer.h>
- #include <ESP8266mDNS.h>
- #include <ESP8266HTTPUpdateServer.h>
- #include <ArduinoJson.h>
- #include <Keypad.h>
- ESP8266WebServer httpServer(80);
- ESP8266HTTPUpdateServer httpUpdater;
- WiFiClient espClient;
- PubSubClient client(espClient);
- bool noidle = false;
- int idletime = 0;
- int red_led = 3;
- int green_led = 1;
- long lastMsg = 0;
- char msg[50];
- int value = 0;
- const char* host = "keypad-webupdate";
- const char* ssid = "SSID-DES-NETZWERKS";
- const char* password = "WPA2-SCHLÜSSEL-DES-NETZWERKS";
- const char* mqtt_server = "IP-ADRESSE.DES.MQTT.BROKERS";
- const char* mqtt_clientId = "keypad01";
- const char* mqtt_topic = "stat/keypad01/CMND";
- const char* mqtt_topic_voltage = "stat/keypad01/VOLTAGE";
- const char* mqtt_topic_ip = "stat/keypad01/IPADDRESS";
- const char* mqtt_intopic = "stat/keypad01/RECEIVE";
- const byte n_rows = 4;
- const byte n_cols = 4;
- char keys[n_rows][n_cols] = {
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'}
- };
- byte colPins[n_rows] = {D8, D4, D5, D3};
- byte rowPins[n_cols] = {D7, D6, D1, D2};
- Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
- void local_yield()
- {
- yield();
- client.loop();
- }
- void local_delay(unsigned long millisecs)
- {
- unsigned long start = millis();
- local_yield();
- if (millisecs > 0)
- {
- while ((millis()-start) < millisecs)
- {
- local_yield();
- }
- }
- }
- void setup_wifi() {
- local_delay(10);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- local_delay(500);
- }
- }
- void led_bootblink() {
- digitalWrite(green_led, LOW);
- digitalWrite(red_led, LOW);
- local_delay(1000);
- digitalWrite(green_led, HIGH);
- digitalWrite(red_led, HIGH);
- }
- void led_sleepblink() {
- digitalWrite(green_led, LOW);
- local_delay(250);
- digitalWrite(green_led, HIGH);
- local_delay(250);
- digitalWrite(green_led, LOW);
- local_delay(250);
- digitalWrite(green_led, HIGH);
- local_delay(250);
- digitalWrite(red_led, LOW);
- local_delay(1000);
- digitalWrite(red_led, HIGH);
- }
- void led_greenblink() {
- digitalWrite(green_led, LOW);
- local_delay(1000);
- digitalWrite(green_led, HIGH);
- }
- void led_redblink() {
- digitalWrite(red_led, LOW);
- local_delay(1000);
- digitalWrite(red_led, HIGH);
- }
- void led_greenshortblink() {
- digitalWrite(green_led, LOW);
- local_delay(150);
- digitalWrite(green_led, HIGH);
- local_delay(100);
- digitalWrite(green_led, LOW);
- local_delay(150);
- digitalWrite(green_led, HIGH);
- }
- void led_redshortblink() {
- digitalWrite(red_led, LOW);
- local_delay(150);
- digitalWrite(red_led, HIGH);
- local_delay(100);
- digitalWrite(red_led, LOW);
- local_delay(150);
- digitalWrite(red_led, HIGH);
- }
- void callback(char* topic, byte* payload, unsigned int length) {
- char message[length+1];
- for (int i = 0; i < length; i++) {
- message[i] = (char)payload[i];
- }
- message[length] = '\0';
- idletime = 0;
- if (strcmp(message,"ready")==0) {
- led_greenshortblink();
- }
- else if (strcmp(message,"devon")==0) {
- led_greenblink();
- }
- else if (strcmp(message,"devoff")==0) {
- led_redblink();
- }
- else { led_redshortblink(); }
- }
- void reconnect() {
- while (!client.connected()) {
- String clientId = "keypadClient-";
- clientId += String(random(0xffff), HEX);
- if (client.connect(clientId.c_str())) {
- client.publish(mqtt_topic, "MQTT: connected");
- int sensorValue = analogRead(A0);
- float volts = sensorValue * (3.3 / 1023.0);
- char voltage[5];
- String str;
- str=String(volts);
- str.toCharArray(voltage,5);
- client.publish(mqtt_topic_voltage, voltage);
- String ipaddress = WiFi.localIP().toString();
- char ipchar[ipaddress.length()+1];
- ipaddress.toCharArray(ipchar,ipaddress.length()+1);
- client.publish(mqtt_topic_ip, ipchar);
- client.subscribe(mqtt_intopic);
- } else {
- local_delay(5000);
- }
- }
- }
- void handlenoidle() {
- noidle = true;
- httpServer.send(200, "text/plain", "Automatic deep sleep on idle deactivated! Please navigate to : " + WiFi.localIP().toString() + "/update to initialize an OTA-Update.");
- digitalWrite(green_led, LOW);
- }
- void setup() {
- pinMode(green_led, FUNCTION_3);
- pinMode(green_led, OUTPUT);
- pinMode(red_led, FUNCTION_3);
- pinMode(red_led, OUTPUT);
- digitalWrite(green_led, HIGH);
- digitalWrite(red_led, HIGH);
- setup_wifi();
- client.setServer(mqtt_server, 1883);
- client.setCallback(callback);
- MDNS.begin(host);
- httpUpdater.setup(&httpServer);
- httpServer.begin();
- MDNS.addService("http", "tcp", 80);
- httpServer.on("/noidle", handlenoidle);
- led_bootblink();
- }
- void loop() {
- httpServer.handleClient();
- if (!client.connected()) {
- reconnect();
- }
- client.loop();
- char myKey = myKeypad.getKey();
- if (myKey != NULL){
- idletime = 0;
- String myKeySTR="";
- myKeySTR=myKey;
- myKeySTR.toCharArray(msg, 75);
- client.publish(mqtt_topic, msg);
- }
- local_delay(10);
- if (noidle == false) { idletime = idletime+1; }
- if (idletime > 1000) {
- led_sleepblink();
- ESP.deepSleep(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement