本实验用E4A编写了一个简单的APP,手机端作为服务端,mini D1模块作为客户端,上电连接后,APP能够控制模块上的灯,也可以控制模块上的红外、射频模块发送相应的键值。反过来,用模块上的一个按键的不同按键动作,包括单击,双击,长按按下,长按弹起,分别控制手机拨打指定的号码,发送短信,以及拍照等。实验中,如果没有模块,手机安装好APP后,可以用网络调试助手进行简单的测试。
制作出来的实物图如下:
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)
|