#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPClient.h>
extern "C" {
#include "user_interface.h"
}
const char* ssid = "WIFISSID";
const char* password = "***************";
const String self_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const String serv_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const String name = "IOT_lamp";
const String serverIP = "192.168.1.111";
bool lamp_on = false;
bool can_toggle = false;
int button_state;
ESP8266WebServer server(80);
HTTPClient http;
const int lamp = 2;
const int button = 0;
void handleRoot() {
server.send(200, "text/plain", "Hello! I am " + name);
}
void handleNotFound(){
String message = "not found";
server.send(404, "text/plain", message);
}
void turnOnLamp(){
digitalWrite(lamp, LOW);
lamp_on = true;
}
void turnOffLamp(){
digitalWrite(lamp, HIGH);
lamp_on = false;
}
void sendServer(bool state){
http.begin("http://"+serverIP+"/iapi/setstate");
String post = "token="+self_token+"&state="+(state?"on":"off");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.POST(post);
http.end();
}
void toggleLamp(){
if(lamp_on == true) {
turnOffLamp();
sendServer(false);
} else {
turnOnLamp();
sendServer(true);
}
}
void handleOn(){
String token = server.arg("token");
if(serv_token != token) {
String message = "access denied";
server.send(401, "text/plain", message);
return;
}
turnOnLamp();
String message = "success";
server.send(200, "text/plain", message);
}
void handleOff(){
String token = server.arg("token");
if(serv_token != token) {
String message = "access denied";
server.send(401, "text/plain", message);
return;
}
turnOffLamp();
String message = "success";
server.send(200, "text/plain", message);
}
void initVariant() {
uint8_t mac[6] = {0x00, 0xA3, 0xA0, 0x1C, 0x8C, 0x45};
wifi_set_macaddr(STATION_IF, &mac[0]);
}
void setup(void){
pinMode(lamp, OUTPUT);
pinMode(button, INPUT_PULLUP);
turnOffLamp();
WiFi.hostname(name);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.on("/", handleRoot);
server.on("/on", HTTP_POST, handleOn);
server.on("/off", HTTP_POST, handleOff);
server.onNotFound(handleNotFound);
server.begin();
}
void loop(void){
server.handleClient();
button_state = digitalRead(button);
if (button_state == HIGH && can_toggle) {
toggleLamp();
can_toggle = false;
delay(500);
} else if(button_state == LOW){
can_toggle = true;
}
}