-
-
零基础开发WIFI设备
-
2020-12-5 09:57 9726
-
前言
shineblink core 开发板(简称Core)的库函数支持WIFI功能,所以只用几行代码即可实现基于esp8266 WIFI模块的联网通信(TCP, UDP, MQTT)功能。这里我们主要介绍通过TCP实现联网通信的功能,更多关于TCP, UDP, MQTT通信请前往shineblink.com 了解。
PS: Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。
一、本例程实现功能
通过ESP8266模块和指定的服务器建立TCP连接,ESP8266每5秒向服务器发送一个数据包(5字节),服务器每1秒钟向ESP8266发送一个数据包(10字节)。
服务器的地址即可以是IP地址也可以是域名。
二、 Core提供的TCP功能介绍
Core已将TCP的操作封装成三个简单的API函数,分别为:LIB_WifiTcpConfig(),LIB_WifiTcpRecv(),LIB_WifiTcpSend()。您只需要调用这三个API即可将esp8266连接上路由器并实现和server端的收发数据。并且Core会自动处理通信中的异常情况并尝试重新恢复通信(比如和路由器的连接异常断开,和server的tcp连接异常断开,网络异常等),您无需考虑这些复杂的情况即可实现WIFI长期稳定的在线通讯。
三、接线图
四、材料清单
名称 | 推荐购买链接(或者您可以自己制作) | 模块/芯片硬件资料下载 |
---|---|---|
ESP8266 wifi模块 | <a href="https://detail.tmall.com/item.htm?id=522820720009&ali_refid=a3_430582_1006:1104520036:N:Tfdfidcim+zrYjKiOZscK7hdsOn917cy:1650d9002d5bc880562ae7f6b43ba03e&ali_trackid=1_1650d9002d5bc880562ae7f6b43ba03e&spm=a230r.1.14.1" target="_blank">购买链接</a>,该模块淘宝上非常多店家,您只需要选一个类似的即可,外观不一样也可以,只要可按照上面的接线图接线即可。 | <a href="https://yunpan.360.cn/surl_yPvURD2Vgwf" target="_blank">下载地址</a> |
路由器 |
声明:这里推荐的商家和Core没有任何合作关系,您完全可以去其他商家或渠道购买,只要功能相似即可。
五、完整代码(通过IP地址和服务器建立连接)
通过ESP8266模块和指定的服务器建立TCP连接,ESP8266每5秒向服务器发送一个数据包(5字节),服务器每1秒钟向ESP8266发送一个数据包(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 | server_addr = "192.168.1.101" - - 这里也可以直接写服务器的域名,比如 "www.shineblink.com" 等 server_port = 8080 ap_ssid = "mywifi" - - 路由器账号 ap_passwd = "abc123" - - 路由器密码 - - 配置USB以虚拟串口模式工作,这样调用 print ()函数就会在电脑串口终端打印输出 LIB_UsbConfig( "CDC" ) - - 使能系统 10 毫秒定时器开始工作 LIB_10msTimerConfig( "ENABLE" ) - - 设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式 - - 路由器账号:mywifi 路由器密码:abc123,服务器ip: 192.168 . 1.101 端口号: 8080 - - 心跳包间隔时间 0 秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍 LIB_WifiTcpConfig( "UART0" , "D5" ,ap_ssid,ap_passwd,server_addr,server_port, 0 ) - - 变量初始化 cnt_10ms = 0 send_tab = { 1 , 2 , 3 , 4 , 5 } - - 需要发送给server端的数据 - - 定义 10ms 中断回调函数 function LIB_10msTimerCallback() cnt_10ms = cnt_10ms + 1 end - - 开始大循环 while (GC( 1 ) = = true) do - - 查询是否收到server下发的数据,如果收到就 print 输出收到的数据 recv_flag,recv_tab = LIB_WifiTcpRecv() if recv_flag = = 1 then print (string. format ( "tcp client receive %d bytes" , #recv_tab)) for k,v in ipairs(recv_tab) do print (k,v) end end - - 每 5 秒发送一包数据给server if cnt_10ms > = 500 then - - 5000ms cnt_10ms = 0 LIB_WifiTcpSend(send_tab) end end |
<small>如果感兴趣,上面代码中出现的LIB开头的库函数可以在<a href="http://shineblink.com/#/?page=API%E6%96%87%E6%A1%A3" target="_blank">API文档</a>中通过<kbd>Ctrl</kbd>+<kbd>F</kbd>查询。</small>
代码运行结果
这里我们在局域网内的一台电脑(192.168.1.101)上运行《<a href="https://yunpan.360.cn/surl_yPvUkcgNuMg" target="_blank">网络调试助手</a>》软件模拟Tcp Server端进行调试。
(1)Server端数据接收如下:
(2)Client端(Core开发板)数据接收如下:
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法