首先几个问题:
1,关于连线,很简单,直接ESP8266与arduino连接,就五根线。如果没有弄好,就单独调试一下
VCC,CH_PD连5v的(貌似网上都是连3.3v,但是我连3.3没弄好),TXD-连板RXD,RXD连板TXD,GND连GND
还有我用的是mega2560,建议用,可能uno板子也会出问题
2,下面的代码需要加载一些特定的库函数,arduino IDE才能编译运行。起码要wifi库,AJSON库,要的给我留言!!文件太大,不能分享~
说明一下,我的IDE用的1.8.2才弄好,1.8.4报错
3,代码上传以后,如果没什么反应,拔掉5v那个线,重新再插上去。
4,网页代码需要的也可以找我~(自己做的话自己买个域名,买个服务器。。。。)
首先需要自己做一个动态网页(php,能够与数据库连接,并修改),还需要一个页面呈现数据库中的内容。
然后arduino通过wifi模块抓取页面内容,然后分析控制了。
然后根据我的代码(有些地方不简洁,写的也不好),修改其中的内容就行。
#include <aJSON.h>
String inputString=""; //存储数据库的数据
String _comdata_wifi = ""; //存储wifi反馈的数据`
const char* host = "www.w97.top"; //需要访问的域名
const String url = "/check.php"; // 需要访问的地址
unsigned long lasttime=0;
int state=0; //检测sends函数有无发送成功,如果接收到数据,跳出循环
String postRequest =(String)("GET ") + url + " HTTP/1.1\r\n" + //GET请求的格式
//"Content-Type: text/html;charset=utf-8\r\n" +
"Host: " + host + "\r\n" +
// "User-Agent: BuildFailureDetectorESP8266\r\n" +
"Connection: close\r\n\r\n";
void processMessage(aJsonObject *msg){ //网页上的ajson格式
char* chufang;
aJsonObject* chufang1 = aJson.getObjectItem(msg, "chufang");
aJsonObject* keting1 = aJson.getObjectItem(msg, "keting");
aJsonObject* bedroom1 = aJson.getObjectItem(msg, "bedroom");
aJsonObject* door1 = aJson.getObjectItem(msg, "door");
aJsonObject* chuanghu1 = aJson.getObjectItem(msg, "chuanghu");
aJsonObject* jiashiqi1 = aJson.getObjectItem(msg, "jiashiqi");
String chufang2=chufang1->valuestring;
String keting2=keting1->valuestring;
String bedroom2=bedroom1->valuestring;
String door2=door1->valuestring;
String chuanghu2=chuanghu1->valuestring;
String jiashiqi2=jiashiqi1->valuestring;
int chufang22=chufang2.toInt();
int keting22=keting2.toInt();
int bedroom22=bedroom2.toInt();
int door22=door2.toInt();
int jiashiqi22=jiashiqi2.toInt();
int chuanghu22=chuanghu2.toInt();
Serial.print("one:");Serial.print(chufang22);Serial.print(" ");
Serial.print("tow:");Serial.print(keting22);Serial.print(" ");
Serial.print("three:");Serial.print(bedroom22);Serial.print(" ");
Serial.print("four:");Serial.print(chuanghu22);Serial.print(" ");
Serial.print("five:");Serial.print(jiashiqi22);Serial.print(" ");
Serial.print("six:");Serial.print(door22);Serial.print(" ");
if(bedroom22)digitalWrite(9,HIGH);
else digitalWrite(9,LOW);
if(keting22)digitalWrite(10,HIGH);
else digitalWrite(10,LOW);
if(chufang22)digitalWrite(11,HIGH);
else digitalWrite(11,LOW);
if(jiashiqi22)digitalWrite(12,HIGH);
else digitalWrite(12,LOW);
if(chuanghu22)digitalWrite(8,HIGH);
else digitalWrite(8,LOW);
}
void setup()
{
//
for(int i=8;i<=11;i++)pinMode(i,OUTPUT);
Serial.begin(9600);
Serial1.begin(115200);
delay(3000);
Serial1.println("AT+CWMODE=3");
while(!getWifiSerialData("OK"));
Serial1.println("AT+CWJAP=\"TYMS1\",\"wobuzhidao1601\"");//wifi名字和密码
while(!getWifiSerialData("OK"));
Serial1.println("AT+CIPMUX=0");
while(!getWifiSerialData("OK"));
Serial1.println("AT+CIPSTART=\"TCP\",\"www.w97.top\",80");
while(!getWifiData("CONNECTED"));
Serial1.println("AT+CIPMODE=1");
while(!getWifiSerialData("OK"));
Serial1.println("AT+CIPSEND");
while(!getWifiSerialData("OK>"));
}
void loop()
{
lasttime=millis();
Serial1.println(postRequest);
//delay(10);
while(millis()-lasttime<5000){ // 为sends()准备时间
sends(); //读取数据库数据并处理字符串修改灯的状态
if(state==1) break;
}
Serial1.print("+++");//退出发送模式
state=0;
delay(100);
Serial1.println("AT+CIPSTART=\"TCP\",\"www.w97.top\",80");
while(!getWifiData("CONNECTED"));
Serial1.println("AT+CIPMODE=1");
while(!getWifiSerialData("OK"));
Serial1.println("AT+CIPSEND");
while(!getWifiSerialData("OK>"));
Serial1.println(postRequest);
delay(10);
}
boolean getWifiSerialData(String val){ //读取wifi反馈的数据
while (Serial1.available() > 0){
_comdata_wifi += char(Serial1.read()); //get wifi data
delay(4);
_comdata_wifi.trim();
//Serial.println(_comdata_wifi);
}
Serial.println(_comdata_wifi);
if(_comdata_wifi.endsWith("OK")|| _comdata_wifi.endsWith(val)){
Serial.println("+++++++++++++++");
_comdata_wifi = String("");
return 1;
}else return 0;
}
boolean getWifiData(String val){ //读取wifi反馈的数据
while (Serial1.available() > 0){
_comdata_wifi += char(Serial1.read()); //get wifi data
delay(4);
_comdata_wifi.trim();
//Serial.println(_comdata_wifi);
}
Serial.println(_comdata_wifi);
if(_comdata_wifi.endsWith("OK")|| _comdata_wifi.endsWith(val)|| _comdata_wifi.endsWith("ERROR")|| _comdata_wifi.endsWith("CON")|| _comdata_wifi.endsWith("CLOSED")){
Serial.println("+++++++++++++++");
_comdata_wifi = String("");
return 1;
}else return 0;
}
void sends(){ //读取数据库数据并处理字符串修改灯的状态
while(Serial1.available()){
String line = Serial1.readStringUntil('\r');
// Serial.print(line);
line.trim();
inputString=line;
int len = inputString.length()+1;
if(inputString.startsWith("{") && inputString.endsWith("}")){
state=1;
char jsonString[len];
inputString.toCharArray(jsonString,len);
aJsonObject *msg = aJson.parse(jsonString);
processMessage(msg);
aJson.deleteItem(msg);
}
}
}