如何用arduino来测试ESP8266 WIFI模块 如何用arduino来测试ESP8266 WIFI模块
ESP8266 WIFI\u6a21\u5757\u53ef\u4ee5\u76f4\u63a5\u94fe\u63a5arduino\u5417arduino\u5df2\u7ecf\u5b98\u65b9\u652f\u6301ESP8266\uff0c \u5373 ESP8266\u6210\u4e3aarduino\u7684\u4e00\u79cd\u677f\u578b\uff0c\u53ef\u4ee5\u76f4\u63a5\u628a8266 \u5f53 uno \u4f7f\u7528\u3002\u5177\u4f53\u4e0d\u540c\u4e5f\u6709\uff0c\u4f46\u57fa\u672c\u7684\u6d4b\u4e0b\u6e29\u5ea6\uff0c\u63a7\u5236\u5f00\u5173\u4e4b\u7c7b\u7684\u5355\u72ec8266\u5c31\u591f\u4e86\u3002
MT7628NN\u4e32\u53e3\u6a21\u5757\uff0cwifi\u6a21\u5757\u5f00\u53d1
OTT\u76d2\u5b50\u3001DVB\u673a\u9876\u76d2\u53ef\u7528\u5230\u6211\u53f8\u7684WIFI\u6a21\u5757\u4ea7\u54c1\u6709\u4ee5\u4e0b\uff1a
\u8054\u53d1\u79d1\uff08MTK\uff09\u7cfb\u5217\uff1a
USB\u7f51\u5361\uff1a
TML1505C-MT7601\u7cfb\u5217\uff1b TML3011A-MT7603\u7cfb\u5217\uff1bTML1507F-RT3070\u7cfb\u5217\uff1b
AP\u8def\u7531\uff1a
TMA1508B-MT7688\u7cfb\u5217\uff1bTMA3007A-MT7628\u7cfb\u5217\u3002
\u745e\u6631\uff08Realtek\uff09\u7cfb\u5217\uff1a
USB\u63a5\u53e3\uff1a
TML1510EU-RTL8188EUS\u7cfb\u5217\uff1b TML1511A-RTL8188ETV\u7cfb\u5217\uff1b
TML1515A-RTL8188FTV\u7cfb\u5217\uff1b
SDIO\u63a5\u53e3\uff1a
TML1516A-RTL8189ETV\u7cfb\u5217\uff1bTML1517A-RTL8189FTV\u7cfb\u5217\uff1b
TML1512A-RTL8189ES\u7cfb\u5217\uff1b
WIFI+BT\u84dd\u7259\uff1a
TML1509A-RTL8723BS\u7cfb\u5217\uff1bTML1509BU-RTL8723BU\u7cfb\u5217\u3002
原理很简单。。从串口芯片到单片机和这个口是个并联关系。。然后usb 到这个IO口有1k电阻,我就启用了单片机的内上拉稍微平衡下阻抗,,就把arduino板子作为usb to ttl工具了。。嘿嘿
(本设置在mangoII板硬件环境下测试通过,不确定其他硬件是否可以使用,请自行尝试)
代码如下:
ARDUINO 代码复制打印
void setup() {
pinMode(0,INPUT_PULLUP);
pinMode(1,INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
}
因为程序很简单,我又偷懒就没写注释了。主要内容就是创建一个软串口,软串口接模块 ,然后让软串口的回显数据转发到硬件串口,硬件串口的输入数据转发到软串口。
下面来介绍下接线
3V3 ------------ VCC
ARDUINO GND ------------ GND esp8266
IO1 ------------ TX
IO0 ------------ RX
注意,TX 是直接对应板子上的TX RX 对应RX。,。原因自己思考下。
非常简单的接线,就是把我们的WIFI模块接到arduino的软串口上,需要注意的是,wifi模块是3.3V供电。
好了。已经全部准备好了。我们要正式开始了。首先我们打开串口监视器,然后重新插拔一下模块的VCC接线(让模块重启,显示其启动信息),你应该能看到如下图所示的启动信息,说明已经没有任何问题了。
1.png
前面的乱码是因为模块启动信息的波特率与后面启动后不一致造成的,不管就行了
重点来了看窗口的右下角“没有结束符”
这个要选择成“回车”如下图
1.png
我们输入下面这个指令
AT+Reset
复制代码
点击发送后,模块会重启
显示如下
AT+Reset
done
返回字符是done 为啥d没了呢,实际上是有的。可能是软串口的bug,这个我们不研究了。。反正能用知道就行了,不影响使用。
好上面的重启命令我们等会会经常用到
下面,我们要查询一下模块的工作模式,模块一共有三种工作模式1.Station 2.AP 3.Station+AP 第一种是客户端模式,第二种是接入点模式,第三种是两种模式共存。既然我们是登陆路由器然后往指定网络传数据,所以我们选第一种模式。。
设置之前先查询
AT+MODE?
复制代码
返回内容:
AT+MODE?
+MODE:0
done
这个0就是没配置的意思。。我们配置成1即可
用这个命令来设置
AT+MODE=1
复制代码
这样就设置成模式1了。具体的详细指令请参阅上面的指令手册以及自己多尝试
返回如下:
AT+MODE=1
one
坑爹的d又丢了,不管~~~这个时候,关键的时刻来了,这时候虽然设置了。但还没有生效,需要重启模块。还记得我之前说的指令么?我就不重复写了。。反正这时候要重启(拔电源插头也是可以的)
然后我们来查询下
AT+MODE?
复制代码
返回如下:
AT+MODE?
+MODE:1
done
大概就是这样就设置好模式了。
我们后面就暂时不介绍回显内容了,很简单
然后就是查询一下附近能搜索到的wifi网络信号
AT+ShowAP
复制代码
回显内容就是周围wifi信号
看到自己的wifi就可以加入网络了
AT+JoinAP="SSID","PASSWD"
复制代码
很简单的命令对吧,前面写SSID号,后面写密码。回车发送命令就可以加入网络了。记得加完网络重启下模块
好了,这样模块就连上路由器了
下面就需要有个小工具,在自己计算机(局域网内)上建立一个TCP端口的监听,来模拟服务器
小工具连接
我计算机IP是192.168.1.101 我打算监听8089端口,如下图配置,监听(当然你也可以监听你需要的任何端口)
tcp.png
(说明:任何网络服务器都可以看成是工作在指定端口,负责解析指定协议的端口监听器)
设置模块到单链接模式(只能使用一个连接的模式,这种比较方便简单,多链接模式我们以后再讲)
AT+MUX=0
复制代码
然后重启模块(拔电或者用reset指令都可以)
好了。以上的设置模块设置一次后,断电后还是会有记忆的。。也就是说只需要配置一次。。下面开始建立TCP连接啥的。断电不会重连了。。
下面我们在模块上建立一个TCP的连接
使用指令
AT+NewSTA=“TCP”,“192.168.1.101”,8089
复制代码
很简单的指令,首先说明连接类型,目标ip地址,端口号。。这样就建立好了。。
然后我们就能发送数据了
指令
AT+UpDate=11
复制代码
然后串口会返回一个>号,我们继续输入hello world发送
这样就会从TCP监听的一端看到数据了。很简单吧
指令后面的11的意思就是你要发送的字符的长度。系统是靠字符长度判断一句话是否可以发送,所以我们的数据长度要和下面要发送的字符串的长度等长才行。。
简单的教程目前就到这里了,有助于大家理解AT指令的使用。
另外我们还有一个arduino的库,虽然目前开发的不太完全,基本函数都开发完了,例程还没写好,bug可能还有不少,也都在调试中,有兴趣的可以去看看
绛旓細杩炴帴姝ラ濡備笅锛1銆佹彃濂藉紑鍙戞澘鍜岃壘鑾繀缂栫▼鍣ㄧ殑USB绾裤2銆佹墦寮鐢佃剳涓婄殑ArduinoIDE锛岄夋嫨瀵瑰簲鐨勬澘瀛愬拰涓插彛缂栧彿銆3銆佺偣鍑烩滀笂浼犫濇寜閽紝瀹屾垚涓嬭浇鍜岀紪绋嬨
绛旓細1銆佸垵濮嬪寲鍑芥暟涓細void init_serialcom( void ){ 銆傘傘俆I=1;} //姝ゅ彞搴斾负TI = 0;2銆佹棦鐒朵綘娌浣跨敤涓茶涓柇鏈嶅姟绋嬪簭鐨勬柟寮忔潵鍙戦佹暟鎹紝閭d箞init_serialcom鍑芥暟涓璉E鐨ES灏卞簲璇ヤ负0.锛堝ソ鍍忎綘鐨勭▼搴忔湭鐢ㄤ换浣曚腑鏂紝鎵浠E搴斾负0x00锛夛紝绂佹涓茶涓柇锛屽惁鍒欎腑鏂骇鐢熷悗鍗曠墖鏈轰細鐩存帴杞悜绋嬪簭鍦板潃0023H寮濮...
绛旓細uno鏄敤鏉ヤ慨楗伴槼鎬у悕璇嶇殑(鏈夋椂鍊欎篃鍙互鍔犱簬褰㈠璇嶅墠,灏嗗舰瀹硅瘝鍚嶈瘝鍖),鍙嶄箣,una鍒欐槸鐢ㄦ潵淇グ闃存у悕璇 浣嗗湪uno鐢ㄤ簬鍗曟暟闃虫у悕璇嶅墠鏃,浼氬彂鐢熺煭灏剧幇璞,灏卞彉鎴愪簡un 褰撲慨楗板鏁伴槼鎬у悕璇嶆椂,瀹屾暣鍗曡瘝,骞跺姞涓妔,灏辨槸unos/unas 濡:Esto es un libro de ejercicios. (un ->涔︽槸闃虫)La ganadora del premio...
绛旓細delay(25);//pwm鏈夌敤鍊硷紝瓒婂ぇ宸﹁竟鏂瑰悜鐨勮疆瀛愯秺蹇 zuo1=1;//宸﹁竟杞瓙鍋滄 you1=1;you2=1; //鍙宠竟杞瓙鍋滄 delay(100);//pwm鏃犵敤鍊硷紝瓒婂ぇ锛屽皬杞﹁窇鐨勮秺鎱
绛旓細鎴戦夌涓涓紝es鍘嬬缉鏌ョ湅鍣 鐐硅繘鍘绘妸img鎴杋so鏂囦欢澶嶅埗 涔嬪悗鏀剧疆鍒版牴鐩綍 鏍圭洰褰曞氨鏄涓涓洰褰 涔嬪悗鐐硅繘鍘籰imbo 閫夋嫨杩欎釜鏂囦欢 鏍规嵁浣犵殑鍠滃ソ锛岃涓涓嬪弬鏁帮紝鐐瑰嚮寮濮嬮敭灏卞ソ浜 涔嬪悗鏄洿鎺ユ枃浠舵簮 涔熷緱涓嬭浇es鏂囦欢娴忚鍣 涔嬪悗鎶奍MG鎴朓SO鏂囦欢澶嶅埗 绮樺笘鍒版牴鐩綍 涔嬪悗鐐硅繘鍘籰imbo 閫夋嫨杩欎釜鏂囦欢 鏍规嵁浣犵殑鍠滃ソ锛...
绛旓細濡傛灉浣犻渶瑕侀珮閫燂紝澶у嚑鐧綤鎴栬呬笂鍏嗗瓧鑺傛瘡绉掞紝浣犻渶瑕浣跨敤spi杞瑆ifi鐨勩傜櫨搴︽悳绱 鈥淓SP8266 楂橀熲濅綘浼氬彂鐜版湁涓涓ā鍧楋紝鍩轰簬ESP8266鑺墖锛閫氳繃SPI鎺ュ彛鍜屽崟鐗囨満涓绘満鐩歌繛锛屽疄鐜颁簡楂橀熶紶杈撻熷害杩囧厗瀛楄妭姣忕锛岃繕鍐呭祵浜嗕竴涓綉椤碉紝鏀寔澶氶摼鎺ャ乀CP鏈嶅姟鍣ㄥ拰瀹㈡埛绔佸姞瀵嗙瓑绛夎澶氬姛鑳姐傚湪鏌愬疂涓婁篃鏈夈
绛旓細public String getLocalIpAddress() { try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inet...
绛旓細arduino閰嶅悎涓涓覆鍙h浆WIFI鐨勬ā鍧楀氨琛屼簡銆備覆鍙h浆WIFI鐨勬ā鍧閫氳繃閰嶇疆锛屽彲浠ヤ綔涓烘湇鍔″櫒涔熷彲浠ヤ綔涓哄鎴风銆俛rduino鐩存帴閫氳繃涓插彛灏卞彲浠ュ彂閫佸拰鎺ユ敹鐢佃剳绔殑鏁版嵁浜嗐