程序通過ESP8266連接貝殼物聯,使用微信關注貝殼物聯進行控制,也可下載貝殼物聯控制APP 進行操作。程序中加入了自動配網
Arduino源程序如下:
- //增加聯網失敗,重新連接,
- #include <ESP8266WiFi.h>
- WiFiClient client;
- #define led 4 //接繼電器控制燈
- #define relay1 2 //模塊led,作網絡狀態指示,啟動后常亮,則正常聯網
- #define key 5//將dht11的data口接在8266的GPIO2上
- const char *ssid = "Nok7";
- const char *password = "bfx1234567890";
- const char *host = "121.42.180.30";
- char flag=0;
- int x=0;
- int y=0;
- int f;
- bool autoConfig()
- {
- int a=0;
- pinMode(key,INPUT);
- if(digitalRead(key) == LOW)
- flag=1;
- else
- flag=0;
- while(!digitalRead(key));
-
- if(flag==1)
- {
- return false;
- }
- else
- {
- WiFi.begin();
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.println("AutoConfig Success");
- Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
- Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
- WiFi.printDiag(Serial);
- digitalWrite(relay1,HIGH);
- delay(800);
- delay(100);
- digitalWrite(relay1,LOW);
- delay(100);
- a++;
- if(a==20)
- {
- a=0;
- return false;
- break;
- }
- }
- if(false)
- {
- Serial.println("");
- Serial.println("wifi line faild !");
- while(1)
- {
- digitalWrite(relay1,LOW);
- }
-
- }
- else
- {
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- digitalWrite(relay1,HIGH);
- return true;
- }
- }
- }
- //*
- void smartConfig()
- {
- WiFi.mode(WIFI_STA);
- Serial.println("\r\nWait for Smartconfig");
- WiFi.beginSmartConfig();
- while (1)
- {
- Serial.print("Wait soft line..\r\n");
- if (WiFi.smartConfigDone())
- {
- Serial.println("SmartConfig Success");
- Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
- Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
- autoConfig();
- //WiFi.setAutoConnect(true); // 設置自動連接
- break;
- }
- digitalWrite(relay1,LOW);
- delay(100);
- digitalWrite(relay1,HIGH);
- delay(100);
- }
- Serial.println("");
- digitalWrite(relay1,HIGH);
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- }
- //*/
- //*
- void line_tcp()
- {
- Serial.println(WiFi.localIP());
- const int httpPort =8282;
- client.connect(host, httpPort);
- f=10;
- while(f--)
- {
- digitalWrite(relay1,LOW);
- delay(500);
- digitalWrite(relay1,HIGH);
- delay(500);
- }
- if (!client.connect(host, httpPort))
- {
- Serial.println("connection failed");
- return;
- }
- Serial.print("connecting to ");
- Serial.println(host);
- delay(1000);
- //client.write("{\"M\":\"checkin\",\"ID\":\"12664\",\"K\":\6743d7a7c\"}\r\n");//登陸設備,修改成自己的ID和key
- delay(1000);
- client.write("{\"M\":\"checkin\",\"ID\":\"12664\",\"K\":\"6743d7a7c\"}\r\n");//注意:一定要加\r\n 換行才能登陸成功
- delay(1000);
- client.write("{\"M\":\"checkin\",\"ID\":\"12664\",\"K\":\"6743d7a7c\"}\r\n");//注意:一定要加\r\n 換行才能登陸成功
- delay(1000);
- client.write("{\"M\":\"checkin\",\"ID\":\"12664\",\"K\":\"6743d7a7c\"}\r\n");//注意:一定要加\r\n 換行才能登陸成功
- }
- //*/
- void setup()
- {
- Serial.begin(115200);
- pinMode(relay1, OUTPUT);
- pinMode(led, OUTPUT);
- if (!autoConfig())
- {
- Serial.println("Start AP mode");
- smartConfig();
- }
- line_tcp();
- }
- void loop()
- {
- char valueread;
- while(client.available())
- {
- String line = client.readStringUntil('\r');
- Serial.print(line);
- int i;
- for(i=0;i<=150;i++)
- {
- if((line[i]=='p') &&( line[i+1]=='l'))
- {
- digitalWrite(led,HIGH);
- client.write("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"LED1 is on\",\"SIGN\":\"\"}\r\n");
- }
-
- if((line[i]=='s') && (line[i+1]=='t'))
- {
- digitalWrite(led,LOW);
- client.write("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"LED1 is off\",\"SIGN\":\"\"}\r\n");
- }
- if((line[i]=='n') && (line[i+1]=='o')&&(line[i+2]=='k'))
- {
- digitalWrite(relay1,LOW);
- // client.write("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"LED1 is off\",\"SIGN\":\"\"}\r\n");
- }
- //*
- if(line[i]=='b')
- {
- //digitalWrite(relay1,LOW);
- //client.write("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"LED1 is connected\",\"SIGN\":\"ok\"}\r\n");
- y=0;
- client.write("{\"M\":\"say\",\"ID\":\"****\",\"C\":\"12664\"}\r\n");//修改自己的ID,向設備發送信息,防止掉線
- }
- //*/
- }
- }
- // delay(1000);
- // Serial.print(WiFi.status());
- //*
- x++;
- if(x>=10000)
- {
- x=0;
- y++;
- //Serial.println(y);
- }
- if(WiFi.status()!=3||y>=1200)
- {
- if (!autoConfig())
- {
- Serial.println("Start AP mode");
- smartConfig();
- }
- line_tcp();
- }
- //*/
- // delay(1000);
- }
復制代碼
|