arduino +ESP8266 网页WiFi控制

首先几个问题:

1,关于连线,很简单,直接ESP8266与arduino连接,就五根线。如果没有弄好,就单独调试一下

arduino +ESP8266 网页WiFi控制_第1张图片

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模块抓取页面内容,然后分析控制了。

arduino +ESP8266 网页WiFi控制_第2张图片

然后根据我的代码(有些地方不简洁,写的也不好),修改其中的内容就行。

#include 
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);  
        }   
     }
}

 

你可能感兴趣的:(arduino)