本文参考:
基于esp8266的智能家居控制系统-局域网篇2,tcpserver
准备工作:
ESP-01模块
USB转串口
杜邦线若干
Arduino IDE软件 需要注意的事情就是,ESP-01模块需要和手机连接在同一个局域网内。 Arduino IDE需要下载支持ESP的开发板,我们的模块是ESP-01这里选用NodeMCU 0.9 下载开发板的方法可参考:
基于esp8266的智能家居控制系统-基础篇1介绍arduino ide for esp8266
附上:已经可以直接使用的Arduino IDE下载方式 httpsweidian.comuserid=1238350417&wfr=c&ifr=shopdetail
走到这一步说明我们前面的准备工作都做完了,接下来附上需上传到ESP-01模块的代码: #include <ESP8266WiFi.h>#define MAX_SRV_CLIENTS 3 //最大同时联接数,即你想要接入的设备数量,8266tcpserver只能接入五个,哎const char *ssid = "WIFI"; ////这里是我的wifi,你使用时修改为你要连接的wifi ssidconst char *password = "1234567890"; //你要连接的wifi密码WiFiServer server(8266);//你要的端口号,随意修改,范围0-65535WiFiClient serverClients[MAX_SRV_CLIENTS];void setup(){ Serial.begin(115200); delay(10); pinMode(16, OUTPUT); digitalWrite(16, 0); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } server.begin(); server.setNoDelay(true); //加上后才正常些}void loop(){ blink(); uint8_t i; if (server.hasClient()) { for (i = 0; i < MAX_SRV_CLIENTS; i++) { if (!serverClients || !serverClients.connected()) { if (serverClients) serverClients.stop();//未联接,就释放 serverClients = server.available();//分配新的 continue; } } WiFiClient serverClient = server.available(); serverClient.stop(); } for (i = 0; i < MAX_SRV_CLIENTS; i++) { if (serverClients && serverClients.connected()) { digitalWrite(16, 0);//有链接存在,就一直长亮 if (serverClients.available()) { while (serverClients.available()) Serial.write(serverClients.read()); } } } if (Serial.available()) { size_t len = Serial.available(); uint8_t sbuf[len]; Serial.readBytes(sbuf, len); //push UART data to all connected telnet clients for (i = 0; i < MAX_SRV_CLIENTS; i++) { if (serverClients && serverClients.connected()) { serverClients.write(sbuf, len); //向所有客户端发送数据 delay(1); } } }}void blink(){ static long previousMillis = 0; static int currstate = 0; if (millis() - previousMillis > 200) //200ms { previousMillis = millis(); currstate = 1 - currstate; digitalWrite(16, currstate); }}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
点击Arduino IDE左上角的“√”号进行编译,成功后点击右边的“→”进行上传。(不懂如何进入烧录模式的看这里: ESP8266-01学习笔记01:如何使用USB转串口对ESP-01进行入门调试、烧录固件?)
一定要注意独立供电,检查好杜邦线的连接。另外需要断电后再次上电才能进入烧录模式。注意波特率是否和你的端口属性设置的一致。
另外:不建议直接复制代码进去,可以先把代码复制到Notepad里面再复制进Arduino IDE(否则容易出现问题) 烧录成功后,重新上电进入运行模式。会发现ESP-01已经连接上你的WIFI了。
下面附上客户端,这里我们可以自己下载一个网络调试助手,打开TCP client,输入ESP-01的IP和端口号(我们设置的8266)IP如何查询?打开192.168.1.1查看路由器的设置界面找到IP。没有路由器的,咱们用电脑开一个WIFI共享大师,然后电脑打开CMD,输入IPconfig,就可以查看了。
然后打开ArduinoIDE 的串口监视器
手机端发送数据就可在串口监视器收到信息了。 这里我附上一个手机端(安卓)开发源码:client 下载之后找到bin 文件夹下的apk文件,安装手机上即可直接使用。
趁热打铁,我们将ESP-01模块和Arduino连接,使用手机通过ESP控制Arduino上面的led灯。(ESP也就是透传)
参考文章:手机通过ESP8266控制Arduino上的LED灯(烧写方式) 接线方式: ESP-01 | Arduino Mega 2560 | VCC | 3v3 | GND | GND | RX | RX | TX | TX | CH_PD | 3V3 |
上传到Arduino的代码: int led_pin = 13;//定义一个10字节的整型数据变量cmd作为命令,这里可以修改为不同的数字。此处设置为10是为了有更好的兼容性。char cmd[10];//判断收到的cmd是否有内容bool valid_cmd = false;void setup(){//定义连接led的引脚为输出信号pinMode(led_pin, OUTPUT);Serial.begin(115200);}void loop(){/*以下部分是串口信息处理过程*///定义一个整数型变量iint i;//如果串口收到有数据if (Serial.available() > 0){//变量i最大为10for (i = 0; i < 10; i++){//清空缓存,存入cmd变量,并以\0作为结束符cmd = '\0';}//此时i只能取前9位,第10位是结束符\0for (i = 0; i < 9; i++){//再次判断串口如果收到有数据,防止数据丢失if (Serial.available() > 0){//给变量cmd赋值,取串口收到的前9位字符cmd = Serial.read();delay(1);}else{//如果串口数据超过9位,后面的字符直接忽略,跳到下一步break;}}/*以上串口信息处理结束*///得到最终变量cmd的有效值valid_cmd = true;}//判断变量cmd的值,开始处理if (valid_cmd){//如果变量cmd的前2位的值是onif (0 == strncmp(cmd, "on", 2)){//则连接led的引脚电压被置高5V,digitalWrite(led_pin, HIGH);//串口打印返回值ON,表示ON的操作执行成功Serial.println("ON");}else if (0 == strncmp(cmd, "off", 3)) //否则如果变量cmd的前3位的值是off{//则连接继电器的引脚电压被置低0V,灯的电路被断开,灯灭digitalWrite(led_pin, LOW);//串口打印返回值F,表示OFF的操作执行成功Serial.println("OFF");}else //如果以上两个条件都不成立,前2位不是ON,或者前3位不是OFF,即不正确的命令{//仅串口打印返回值X,表示指令错误。Serial.println("X");}//到此,变量cmd的指令被处理完毕valid_cmd = false;}//延迟10毫秒,返回loop主程序继续读取新的串口指令delay(10);}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
然后供电运行,会发现ESP-01接入WIFI,然后找到他的IP,使用网络调试助手,新建TCPclient,接入服务端,发送on或者off就可以控制arduino上的led灯了(不需外接led,13口对应arduino上的led灯。)
学习、干货获取
学习 干货 长按二维码,加关注
|