本實驗用E4A編寫了一個簡單的APP,手機端作為服務端,mini D1模塊作為客戶端,上電連接后,APP能夠控制模塊上的燈,也可以控制模塊上的紅外、射頻模塊發送相應的鍵值。反過來,用模塊上的一個按鍵的不同按鍵動作,包括單擊,雙擊,長按按下,長按彈起,分別控制手機撥打指定的號碼,發送短信,以及拍照等。實驗中,如果沒有模塊,手機安裝好APP后,可以用網絡調試助手進行簡單的測試。
制作出來的實物圖如下:
51hei圖片_20211003095349.png (5.84 MB, 下載次數: 66)
下載附件
2021-10-3 09:54 上傳
51hei圖片_20211003095116.png (11.73 KB, 下載次數: 70)
下載附件
2021-10-3 09:54 上傳
51hei圖片_20211003095149.png (105.27 KB, 下載次數: 55)
下載附件
2021-10-3 09:54 上傳
51hei圖片_20211003095108.jpg (93.21 KB, 下載次數: 72)
下載附件
2021-10-3 09:54 上傳
Arduino源程序如下:
- //MINI-D1板,D4/2腳是板載燈,D5/12腳紅,D6/13腳藍,D7/14腳綠,按鈕是D1/5腳,射頻D2/4腳,紅外D3/0腳
- #include <RCSwitch.h>
- RCSwitch mySwitch = RCSwitch();
- #include <IRremote.h>
- IRsend irsend;
- #include "OneButton.h"
- #include <ESP8266WiFi.h>
- #include <WiFiClient.h>
- //const char* STAssid = "TP-LINK_***";
- //const char* STApassword = "********";
- //const char* host = "192.168.0.105";
- const char* STAssid = "Redmi_***";
- const char* STApassword = "********";
- const char* host = "192.168.31.25";
- const uint16_t httpPort = 8090;
- WiFiClient client;
- bool is = 0;
- int red = 12;
- int blue = 14;
- int green = 13;
- int key1 = 5;
- int ledpin = 2;
- OneButton button1(key1, true);
- void setup() {
- Serial.begin(115200);
- while (!Serial) {
- }
- pinMode(0, OUTPUT);
- mySwitch.enableTransmit(4);
- Serial.println("Starting TwoButtons...");
- button1.attachClick(click1);
- button1.attachDoubleClick(doubleclick1);
- button1.attachLongPressStart(longPressStart1);
- // button1.attachDuringLongPress(longPress1);
- button1.attachLongPressStop(longPressStop1);
- pinMode(red, OUTPUT);
- pinMode(blue, OUTPUT);
- pinMode(green, OUTPUT);
- pinMode(ledpin, OUTPUT);
- digitalWrite(red, 1);
- digitalWrite(blue, 1);
- digitalWrite(green, 1);
- WiFi.mode(WIFI_STA);
- }
- void loop() {
- if (WiFi.status() != WL_CONNECTED) { //連接WIFI
- WiFi.disconnect();
- WiFi.begin(STAssid, STApassword);
- gotoWifi();
- }
- else {
- if (!client.connected()) {
- lianjie();
- return;
- }
- else {
- if (is == 0) {
- client.print("OK");
- digitalWrite(ledpin, 0);
- is = 1;
- Serial.println("連接服務器成功");
- }
- }
- }
- Tcp_Handler(Read_Tcp());
- button1.tick();
- }
- String Read_Tcp() { //帶有返回值的函數,讀服務器發過來的數據
- String data = "";
- while (client.available() > 0) {
- data += char(client.read());
- delay(2);
- }
- return data;
- }
- void Tcp_Handler(String data) { //解析收到的數據
- if (data != "") {
- Serial.println("收到服務器信息:");
- Serial.println(data);
- if (data == "1") {
- digitalWrite(12, 0);
- digitalWrite(13, 1);
- digitalWrite(14, 1);
- client.print("open led");
- }
- if (data == "2") {
- digitalWrite(12, 1);
- digitalWrite(13, 1);
- digitalWrite(14, 1);
- client.print("close led");
- }
- if (data == "3") {
- digitalWrite(13, 0);
- digitalWrite(12, 1);
- digitalWrite(14, 1);
- irsend.sendNEC(0xFFE01F, 32);
- client.print("irfrared");
- }
- if (data == "4") {
- digitalWrite(14, 0);
- digitalWrite(13, 1);
- digitalWrite(12, 1);
- mySwitch.send(1786689, 24);
- client.print("433");
- delay(1000);
- irsend.sendNEC(0xFF609F, 32);
- }
- }
- }
- void gotoWifi() {
- while (WiFi.status() != WL_CONNECTED) { //連接WIFI的過程中讓綠燈閃
- digitalWrite(ledpin, 1);
- delay(500);
- Serial.print(".");
- digitalWrite(ledpin, 0);
- delay(500);
- }
- }
- void lianjie() {
- Serial.println("開始連接服務器");
- client.connect(host, httpPort);
- digitalWrite(ledpin, 1);
- delay(200);
- digitalWrite(ledpin, 0);
- delay(200);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
全部資料51hei下載地址:
e4a和Arduino程序 E4A-mini-D1.7z
(1.03 MB, 下載次數: 26)
2021-10-3 15:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|