如何用arduino来测试ESP8266 WIFI模块(wifi普及预热中)
本帖最后由 迷你强 于 2015-12-19 09:52 编辑ESP8266是一款非常廉价的WIFI串口解决方案模块,以目前的超低价格受到各方关注,本强最近也在给它开发arduino库,来方便大家使用,不过捏,我们也需要了解下他的AT指令的操作方法。
首先,ocrobot的ESP8266使用的指令集手册在这里:
http://www.ocrobot.com/doku.php?id=zh:ocrobot:modules:seed:at
大家可以参考,打印或者怎么地。反正到时候经常会用到
AT指令是串口通讯中常用的一种操作指令。大家应该都很熟悉,GPS、短信猫等硬件也都是这种方式来控制的。
我们今天简单讲解下如何让模块登陆网络,建立连接,并且发送数据。让我们能简单的驱动起来,用起来
模块购买连接:
http://item.taobao.com/item.htm?spm=a1z10.3.w4002-404934075.26.LFIdCB&id=40901823151
欢迎大家支持
首先,我估计大家都没有USB TO TTL 硬件,也不是所有的坛友都有mangoII,所以我今天就写个特别的arduino程序,让arduino变成一个串口转发器。
原理很简单。。从串口芯片到单片机和这个口是个并联关系。。然后usb 到这个IO口有1k电阻,我就启用了单片机的内上拉稍微平衡下阻抗,,就把arduino板子作为usb to ttl工具了。。嘿嘿
(本设置在mangoII板硬件环境下测试通过,不确定其他硬件是否可以使用,请自行尝试)
代码如下:
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 是直接对应板子上的TXRX 对应RX。,。原因自己思考下。
非常简单的接线,就是把我们的WIFI模块接到arduino的软串口上,需要注意的是,wifi模块是3.3V供电。
好了。已经全部准备好了。我们要正式开始了。首先我们打开串口监视器,然后重新插拔一下模块的VCC接线(让模块重启,显示其启动信息),你应该能看到如下图所示的启动信息,说明已经没有任何问题了。
前面的乱码是因为模块启动信息的波特率与后面启动后不一致造成的,不管就行了
重点来了看窗口的右下角“没有结束符”
这个要选择成“回车”如下图
我们输入下面这个指令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端口,如下图配置,监听(当然你也可以监听你需要的任何端口)
(说明:任何网络服务器都可以看成是工作在指定端口,负责解析指定协议的端口监听器)
设置模块到单链接模式(只能使用一个连接的模式,这种比较方便简单,多链接模式我们以后再讲)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可能还有不少,也都在调试中,有兴趣的可以去看看
===========实在没想到这篇帖子的搜索排名这么高,但是帖子内容的确是非常非常的过时,当时ESP8266芯片刚刚上市,并且软件非常不稳定,本强也非常的不熟悉,写了这么一片很有问题的帖子,所以希望大家不要去尝试帖子内的内容,或者参考下面这些较新的内容,本内容更新与2015年12月19日============
相关帖子:
Arduino+ESP8266低成本、高效率开发物联网设备
http://www.geek-workshop.com/thread-24932-1-1.html
淘宝杂货铺相关宝贝:
ocrobot HEKR物联网开发板 arduino wifi开发板 IOT主控 328P兼容
采用标准的ateml328P核心,保证最佳的兼容性,配合板载的ESP8266wifi模块,特别设计的固件,无需编程即可进行网络连接,方便你的作品接入云端。
https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-404934075.9.dFdABs&id=523196928204 好东西,赞一个! 好东西,期待应用多起来,方便我等小白。 好東西, 可惜我當日買的一塊, 接錯了 RS232, 給燒了. :'(
這板子的價錢確實非常吸引, 用來做 IoT 的盒子, 可以節省不少.
9600? 115200? wyyyh 发表于 2014-9-9 22:57 static/image/common/back.gif
9600? 115200?
官版AT指令集是115200,我们自己的AT指令会设定在9600 弘毅 发表于 2014-9-9 23:01 static/image/common/back.gif
官版AT指令集是115200,我们自己的AT指令会设定在9600
弘坛主:什么时候出个详细的教程,这个可是wifi神器啊。。。。应用空间很大啊。。 Paderboy 发表于 2014-9-10 10:29 static/image/common/back.gif
弘坛主:什么时候出个详细的教程,这个可是wifi神器啊。。。。应用空间很大啊。。
目前在埋头修复AT bug调试arduino库中 Paderboy 发表于 2014-9-10 10:29 static/image/common/back.gif
弘坛主:什么时候出个详细的教程,这个可是wifi神器啊。。。。应用空间很大啊。。
目前在埋头修复AT bug调试arduino库中,基本已经能用了,逐步将例程和教程放出来 {:soso_e142:}多谢,大大,们的努力。。。我们必须支持啊。。。 決定再訂了兩片回來測試, 希望今次好運一點.
大大的測試如何?
請問如果用硬串口的話, 相比 W5100, 除了可以無線連接外, 是否可以省下一點記憶體.
因為想同時連接多個傳感, 各自有不同的 buffer, 用 Uno 的 SRAM 可能不夠, 考慮轉用 Mgea, 本身有多個硬串口, 可同時跟 PC 連線測試.亦因為 SRAM 増加了四倍, 希望可以同時連上多個傳感 (溫度, 濕度, 氣壓, 光度, 聲音, 震動, 一氧化碳, 易燃氣體, 粉塵, ....)
大大可以提供一個 連接到互聯網 上的範例嗎?
好东西哦……有了这个Arduino就强大多了…… 我再買了兩片回來, 用 TTL 連線在PC 測試, 結果還是一樣.....沒反應.
請問如果在 PC 測試, 應該如何做?
我現在有三個可作 TTL 連線的設備
1) CP2102 (可選 TTL)
2) FT232RL
3) PL2303 TA
分別用三個測試, 結果都是一樣.我想確認一下, 我的做法是否有什麼錯誤..
1) 接線 (應該不會錯吧), 只接四針腳
VCC - 5V
GND - GND
TXD - RXD
RXD - TXD
2) 執行連線軟件, 例如 sscom 或 USR-tcp 之類
3) 選擇對應的 COM port
4) 設定: 57600, N, 8, 1
5) 打開連線 - 如成功的話, 是否應該會先接收到一些亂碼, 之後就 OK
6) 測試 AT 指令, 例如 AT+RST 會回傳 OK
我在打開連線後, 完全沒有任何反應, 沒有回傳什麼
之後再輸入 AT 指令, 也是一片空白, 沒有任何回傳訊息.
請問我是否有什麼地方做錯了呢? 攪了很久, 把中間四個沒用的針 (我用的不是紅色, 是藍色版本) 都連到 VCC, 改用 3.3V
成功出現了兩次 OK, 但當我發出一次 AT+RST 後, 就一直只出亂碼了.
唉....看來又是廢了, 已買了三片....還是用不了. 看來我跟它是沒緣了.
只好用回我的 W5100 / EN20J60 + 無線 AP client 了. 用 putty 以 74880,N,8,1 連線, 終於看到亂碼的真正內容了.
看似是碰到問題不斷重啟, rst cause : 2, 似是工程師匯報錯誤的方式.
rst cause 可能是 重啟的原因, 但不知代碼 2 是代表什麼問題了.