Arduino通讯模块-WifiIO-MT7681模块
简介
- WiFiIO模块是一款面向物联网,智能家居等无线控制领域的产品。
- WiFiIO具有4个gpio口,4个软件pwm和一个uart口,用户可以使用这些外部资源轻松地实现无线控制灯的亮灭,低速电机的旋转,串口输出等。
- 当然WiFiIO既可以工作在STA模式下,也可以工作在AP模式下(默认为STA模式),这两种模式下都具有TCP/IP通信能力。
- 我们为WifiIO提供了多种控制方案,其中包括android app,网络AT指令、uart串口AT指令。
- 用户只要将手机和WifiIO连接起来就可以通过app随心所欲的控制WiFiIO的所有资源了。
产品参数
- 工作电压: 5V
- 功耗:电流约为70mA(5V供电)
- 硬件资源:
- 3个单独的GPIO口(可做软件PWM)
- 3个I/O口扩展成3P接口,直插3P传感器模块
- 1个UART(支持AT指令配置)
- 一个复位引脚
- 一个电源指示灯,一个状态指示灯(连接到GPIO4)
- 尺寸:44mm*32mm
- 重量
- wifi信号有效覆盖半径(无外接天线):180m(环境情况不同,传输的距离不同)
- 信道数:1-14
- 频率范围:2.4-2.4835G
- 发射功率:15-18dbm
- 串口支持传输速率:9600bps、14400、19200、38400、57600、115200bps(默认波特率为115200)
- 完美支持802.11 b/g/n协议
- 支持WIFI加密方式WEP/WPA-PSK/WPA2-PSK/TKIP/AES等
- 支持AP(热点)/STA(WIFI节点)
- 支持SmartLink智能联网功能,可以用APP控制模块连接普通无线路由器
引脚说明
标号 | 名称 | 功能描述 |
1 | 3Pin接口 | 可直插3Pin传感器模块 |
2 | 复位按键 | 复位wifi芯片 |
3 | USB供电口 | 不会弹出USB设备,只做供电使用 |
4 | 串口和复位引脚 |
快速入门
本教程的目的是快速教会用户如何使用MT7681-IoT手机app实现对WifiIO基本操作,当然要想完全使用WifiIO的功能还需要补充后面章节的知识。
所需硬件
- WifiIO x1
- 7-25v电源适配器 x1
- 杜邦线 若干
所需软件
- MT7681-IoT.apk 点击下载
智能连接及控制
- 用7-25v电源适配器给WifiIO通电,此时WifiIO指示灯会不停闪烁,然后将安卓手机连接至wifi路由,打开MT7681-IoT安卓手机app,界面如图所示:
- 在ssid下拉框中选择您期望将WifiIO连接至的ssid,并在Password输入框中输入正确的wifi密码,点击Smart Connection按钮,这样WifiIO会进入智能连接状态。
- 如果WifiIO连接到了指定的无线路由器,那么此时MT7681-IOT软件界面会显示该WifiIO的ip地址信息以及一些可用操作按钮,这您就可以对WifiIO进行操作。如图所示:
一、点击Basic按钮进入基本操作界面
Basic 按钮的作用是为WifiIO 启动一个基本操作的界面,在这个界面中我们主要操控
gpio pwm,界面如下图所示:
- 蓝色矩形框用于输出WifiIO 传过来的反馈信息。
- 黄色矩形框内有个输入框和一个Send按钮,这个主要用于给WifiIO的uart外设写数据。
- 红色矩形框中是用于控制gpio输入/输出以及PWM 输出控制。
1、控制gpio输入/输出
- 在这个界面可以控制4个gpio输入/输出高低电平,譬如点击GPIO0对应的High按钮这样WifiIO对应的gpio0就会被设置为高电平,同时app上的该按钮编程了Low按钮,当用户点击一下gpio0对应的Low按钮时,gpio0输出低电平。
- 用户如果想配置gpio0为输入模式,那么点击gpio0对应的input按钮即可,并且WifiIO的gpio0管脚的高低状态也反应到了这个input按钮上,如果此时显示的是input/High表示此时gpio0当前输入一个高电平,如果为input/Low, 则表示gpio0当前输入一个低电平。其他同理。
2、控制gpio的pwm输出
- 在这个界面里可以控制4个gpio输出pwm波形,但由于它的pwm只能输出低频率的pwm波形,频率范围为1~500Hz,且频率最好与1000Hz是倍数关系。占空比必须满足 (1000 / 频率) * 占空比 >= 1的关系。比如我将gpio2配置为输出200Hz,占空比为%60的pwm波形。那么只需要在PWM2所对应的第一个输入框输入200Hz,第二个输入框输入60然后点击SET按钮即可。其他同理。
二、点击At按钮AT指令发送界面
1、AT指令控制gpio3输出高电平
- 当进入该界面时app会打印出connect server successful,表示用户可以对WifiIO发送AT指令了。在AT Cmd输入框中输入AT+GPIO3=1,然后点击send按钮,此时WifiIO会返回OK,表示gpio3已经配置为输出模式且输出高电平。
2、AT控制WifiIO连接其他无线路由器
- 比如用户想让WifiIO连接到SSID为jansion,password为12345678的无线路由器上,用户只需要一次发送以下指令即可:
AT+SSID=jansion;
AT+PASSWORD=12345678;
AT+CONNECT.
- 此时WifiIO就会连接上这个无线路由器上,
- 把手机wifi也切换到该无线路由上后,就又可以通过手机app控制WifiIO了。
- 当然还有更多AT指令可用《WifiIO AT指令一览表》点击下载
三、点击Uart按钮进入数据透传操作界面
- 在该界面中,您可以把数据发送到WifiIO的串口上,WifiIO的数据也可以发送到该界面中。比如在UART输入框中输入hello world,然后点击send按钮此时"hello world"就会立即传输到WifiIO,WifiIO在通过uart的Tx脚发送出去。如果此时把电脑和WifiIO通过串口连接起来,打开串口助手就可以看到如下图所示的内容:
`注意:默认波特率为115200,UART的波特率可以通过AT+BAUDRTATE=?查看。``
Arduino控制WifiIO
- 在上一章中简单介绍了如何通过手机app快速控制WifiIO的gpio,pwm,数据透传功能。那么在这一章中将详细介绍如何使用Uno控制WifiIO的gpio等基础资源、Uno如何通过WifiIO获取远程网络数据。
用Uno控制WifiIO的gpio等基础资源
1、Uno与WifiIO接线
把Uno的Serial的Rx与WifiIO的Tx相连接,把Uno的Serial的Tx与WifiIO的Rx相连接,把Uno的GND和WifiIO的GND相连接。值得注意的时,应该在arduino IDE中把Uno的串口波特率设置为115200,这样Uno的波特率就和WifiIO的一致了。
如果不知道当前WifiIO的波特率可以通过DFRobot_IoT手机app的AT控制界面发送AT+BAUDRATE=?就可以查询得到。
2、配置wifiIO
- Uno控制WifiIO的GPIO口的本质是Uno通过Uart发送AT指令给WifiIO,WifiIO根据不同的AT指令做出不同的反应。比如控制WifiIO的gpio0输出低电平,那么您需要Uno通过串口发送如下指令:
- 第一步:发送+++使WifiIO进入串口AT指令模式。
- 第二步:周期性的发送AT指令拉高和拉低D0口即可,而用到的AT指令就是AT+GPIO0=1(拉高)和AT+GPIO0=0(拉低),AT指令说明请参考《WifiIO AT指令一览表》。
3、编程实现
/*
*description:
*This demo shows how to control the WifiIO gpio0 blink through arduino such as Uno,Bluno and so on.
*author: jansion
*date:2015.11.16
*version:1.0.0
*note:
*detail desciption:
*when the program is running, the D0 of WifiIO will last high state for 2s and low state for 2s.
*/
//define a buffer name info for receiving the data for WifiIO. const short info_size = 256; char info[info_size];
void setup() {
//set Serial for communication with the WifiIO
Serial.begin(115200);
delay(300);
//send the AT command +++ to WifiIO for force the WifiIO into AT command mode
Serial.print("+++");
//delay 1s for WifiIO dealing
delay(1000);
}
void loop() {
//pull up the pin of WifiIO D0 to high.
Serial.println("AT+GPIO0=1");
//last high state for 2s
delay(2000);
//draw down the pin of WifiIO D0 to low.
Serial.println("AT+GPIO0=0");
//last low state for 2s
delay(2000);
}
4、实验现象
- 把程序download到Uno中运行,这样可以看到WifiIO的gpio0每隔2S亮灭一次。
5、扩展
- 如果想控制GPIO0输出50Hz、占空比40%的话,可以发送AT+PWM0=F50D40即可。当然WifiIO有很多AT指令可用,具体参见《WifiIO AT指令一览表》
用Uno通过WifiIO与远程tcp客服端进行无线传输
- 在这一节中我们将把WifiIO从远程tcp客服端的数据转发给Uno,或者Uno把数据通过WifiIO转发到远程tcp客服端。
1、环境搭建
- 先进入DFRobot_IoT的Uart数据传输界面(如果不知道如何进入该界面可以参考快速入门中的相关描述),并把WifiIO与Uno串口连接好即可。
2、配置WifiIO
- 我们需要达到的配置效果是:Uno可以通过uart从WifiIO获取到DFRobot_IoT发送过来的数据;Uno也可以通过uart发送数据到DFRobot_IoT界面中。由于DFRobot_IoT在连接WifiIO过程中已经对WifiIO进行了配置,因此不需要Uno对它进行任何配置。
3、编程实现
/*
*description:
*this demo shows how Uno to get the data from the remote tcp server var WifiIO and send the data back immediately when data received by Uno.
*author: jansion
*date:2015.11.16
*version:1.0.0
*note:
*detail desciption:*/
//define a buffer name info for receiving the data for WifiIO.
const short info_size = 256;
char info[info_size];
int readlen = 0;
void setup() {
//set Serial for communication with the WifiIO
Serial.begin(115200);
}
void loop() {
//loop read the data wich received by WifiIO from the DFRobot_IOT .
if ((readlen = Serial.available()) > 0){
Serial.readBytes(info, readlen);
//output the data read form WifiIO to
Serial.print(info);
}
}
4、实验现象
WifiIO 工作方式详解
- 本节全面的介绍WifiIO的工作方式,当然对于初级用户,可以不用了解这些。下面是工作框图:
下面是对上图的详细说明:
1、每次WifiIO启动后,UART默认处于串口回环模式即WifiIO接收到的串口数据立刻通过串口转发回去。
2、在这个框图中,蓝色箭头表示的是通过串口发送AT指令的控制模型,黑色箭头表示的是通过wifi发送AT指令的控制模型.
3、红色箭头表示数据传输模型,该模型中数据通过WifiIO转发,让arduino具有访问远程tcp 服务器或客服端能力。数据通路可以是1<-->2, 1<-->3。
a、假设用户刚刚启动WifiIO且接入无线路由器成功。用户想将wifiIO接收到的数据发送到远程客服端,那么用户只需要让远程客服端连接到WifiIO的1000端口,此时WifiIO会将接收到的串口数据转发到远程客服端。断开连接后,接收到的串口数据通过串口发送出去。
b、假设用户刚刚启动WifiIO且接入无线路由器成功。用户想将wifiIO接收到的数据发送到远程服务器,那么用户只需要只用AT+TCPCLICONN指令将WifiIO的连接到远程服务器,如果连接成功,此时WifiIO会将接收到的串口数据转发到远程服务器。
c、假设用户刚刚启动WifiIO且接入无线路由器成功,且此时WifiIO同时连接了远程客服端和服务器。当用户想将串口数据发送到远程客服端或者服务器时,用户需要手动使用AT+U2W=SERVER或者AT+U2W=CLIENT指定数据流向。(注意:如果不使用AT指定的话,默认原则
是哪个谁先建立连接就转发给谁。)当任意一个连接断开时WifiIO会自动将数据转发到未断开连接的远程客服端或者服务器。当两个连接都断开后,接收到的串口数据通过串口发送出去。
4、当WifiIO的1000端口与远程tcp客服端连接或者WifiIO连接了一个远程的tcp服务器时。
- UART会配置为纯数据模式,此时WifiIO会自动将接收到的串口数据转发到远程的tcp客服端或者远程的tcp服务器,且WifiIO将自动把接收到的远程tcp客服端或者远程tcp服务器的数据通过UART转发出去。
- 在上面的应用场景中,如果想让WifiIO把接收到的数据串口数据马上通过UART转发出去而不是转发到远程tcp客服端或者远程tcp服务器。那么可以通过AT+U2U指令配置WifiIO达到此目的。
- 此时想再次希望WifiIO把接收到的串口数据发送到远程tcp客服端或者远程tcp服务器,那么用户必须显示地使用AT+U2W指定WifiIO的数据到底转发到何处。
5、当WifiIO的1000端口与远程tcp客服端相连并且WifiIO连接了一个远程的tcp服务器时。这时候uart的数据流流向必须用过AT+U2W指令来显式指定。当然也可以通过AT+U2U指令配置WifiIO已达到将UART接收到的数据再通过UART发送出去。
6、UART使用的AT指令和TCP使用的AT指令均来自《WifiIO AT指令一览表》格式有点细小的差别。比如UART发送AT指令之前,必须先发+++(没有’\r’,’\n’)进入AT模式,然后发送具体的AT指令,比如”AT+GPIO0=1\r\n”(必须要\r\n)以拉高WifiIO 第0脚)。发送AT+EXITAT退出AT指令模式,进入纯数据模式(此时WifiIO接收到的串口数据会马上通过UART转发出去)。 而TCP方式下可以直接发送具体的AT指令,比如”AT+GPIO0=1”(不用实现发送+++,也不用发送”\r\n”)。
WifiIO AP模式
WifiIO既可以工作在STA模式也可以工作在AP模式。当工作在AP模式时,用户可以用wifi设备连接WifiIO,这样就组成局域网。在AP模式下,WifiIO的控制和数据转发功能和STA模式下是一样的。不同的是AP模式下WifiIO的IP地址固定为:192.168.81.1。
一、AP模式下的一些AT指令 1、STA切换到AP模式:
发送AT+ROLE=ROLE_AP ---->如果配置成功则返回OK。
发送AT+REBOOT ---->重启WifiIO后进入AP模式。
2、AP切换到STA模式:
发送AT+ROLE=ROLE_STA ---->如果配置成功则返回OK。
发送AT+REBOOT ---->重启WifiIO后进入STA模式。
3、查询或设置当前AP模式下的SSID和密码:
发送AT+SOFTAPCONF=? ---->返回当前WifiIO的热点名称和密码。
AT+SOFTAPCONF=jansion1,a12345678 ---->把AP的SSID和密码分别配置为了jansion1和a12345678。
其他的AT指令请参见《WifiIO AT指令一览表》。
二、AP模式下手机APP控制WifiIO
- 假设WifiIO工作在AP模式,且WifiIO的SSID是jansion1,密码是a12345678。打开手机wifi设置,将手机连接到WifiIO上。等连接成功后,打开手机app,此时app界面会出现一个设备,该你设备的IP地址就是192.168.81.1,如图所示:
- 这样就可以对WifiIO进行操作控制,关于如何使用DFRobot-IoT手机app控制WifiIO,请参见快速入门。
三、AP模式下如何使用arduino控制WifiIO
- 在AP模式下,arduino控制WifiIO与在STA模式下的方式是一致的。请参见Arduino控制WifiIO
WifiIO固件升级
- 此升级软件只能对APP进行升级,分正常升级和异常升级两种形式,工具包中有详细的升级说明。点击下载
疑难解答
问: 看到led以各种频率闪烁,wifiIO的启动流程是什么样子的
答: 首先,mt7681会先进入bootloader(此时以4HZ左右的频率闪烁4s)。然后mt7681启动,连接之前设置的ssid,此时以1HZ的频率闪烁。如果连接不上,芯片进入smartlink模式,芯片以5HZ左右的频率快闪,当你使用手机发送smartlink广播后,芯片连接到了路由器,此时芯片以0.25HZ的速度超慢闪烁。
问: 如何让芯片进入smartlink模式
答: 使用at指令,将需要连接的ssid名字设置为一个不存在的名字(例如:AT+SSID=jfasdjfasde)。然后重启,芯片3次寻找jfasdjfasde这个ssid找不到或连不上,就自动进入了smartlink模式。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号