本帖最后由 ITEAD创易工作室 于 2015-9-18 18:43 编辑
----------------------------------------------------2015年9月18日更新-------------------------------------------------------
ITEAD首款智能wifi通用改装件上市:http://www.arduino.cn/thread-17423-1-1.html
----------------------------------------------------2015年6月10日更新-------------------------------------------------------
最新wifi库下载地址:https://github.com/itead/ITEADLIB_Arduino_WeeESP8266/archive/master.zip
库默认是使用硬件串口与ESP8266通信,需要软串口通信只需取消注释Esp8266.h文件里的一行代码
#define ESP8266_USE_SOFTWARE_SERIAL
--------------------------------------【更新】2015年2月5号发布----------------------------------------------2014年10月发布的第一篇mini Rboard的开关教程很多小伙伴问我如果用UNO的话该怎么使用?软件安装不了,手机怎么翻墙?等等问题。当然我们也一直在尽全力解决这些问题,很幸运,软硬件的问题都解决了!现在我们就用ITEAD自己开发的wifi APK和最新版ESP8266 WiFi bee模块WEE实现远程遥控开关操作。
使用UNO搭建硬件所需配件:
因为UNO只有一对串口,已经被WIFI模块占用了,所以要增加一个转串口的板子用软串口来打印串口信息。
使用ITEADUINO MEGA2560搭建硬件所需配件:
此处也可以使用Arduino MEGA2560,但是需要飞线到后面的TX2和RX2。这个就交给小伙伴们自己去尝试吧,成功后可以发到帖子回复里跟大家分享。
库默认设置的是UNO可以直接使用本教程,无需做任何修改。 使用mega2560的时候,只需要打开uartWIFI.h文件,把UNO注释掉,取消注释MEGA,如下:
//#define UNO //uncommentthis line when you use it with UNO board #define MEGA //uncommentthis line when you use it with MEGA board
硬件搭建方面我们先不说怎么接线,因为经常有人问我:“你好,程序已经烧给模块了,为什么不成功?”我的亲大哥啊,所有代码都是烧写进UNO和mega2560主板的,你就算不接模块,代码也是可以上传编译成功的。所以我们的步骤是先把代码烧写进UNO和MEGA2560。
代码如下: [mw_shl_code=c,true]
#define SSID "ITEAD_2" //type your own SSID name
#define PASSWORD "27955416" //type your own WIFI password
#include "uartWIFI.h"
#include <SoftwareSerial.h>
WIFI wifi;
extern int chlID; //client id(0-4)
void setup()
{
pinMode(6,OUTPUT); //使用mega的时候在不改变接线的情况下,此处改为24脚
wifi.begin();
bool b = wifi.Initialize(STA, SSID, PASSWORD);
if(!b)
{
DebugSerial.println("Init error");
}
delay(8000); //make sure the module can have enough time to get an IP address
String ipstring = wifi.showIP();
DebugSerial.println(ipstring); //show the ip address of module
delay(2000);
wifi.confMux(1);
delay(100);
if(wifi.confServer(1,8080))
DebugSerial.println("Server is set up");
}
void loop()
{
char buf[100];
int iLen = wifi.ReceiveMessage(buf);
if(iLen > 0)
{
if (strcmp(buf, "CH0ON") == 0)
{
digitalWrite(6,HIGH); //使用mega的时候在不改变接线的情况下,此处改为24脚
DebugSerial.println("CH0ON");
}
if (strcmp(buf, "CH0OFF") == 0)
{
digitalWrite(6,LOW); //使用mega的时候在不改变接线的情况下,此处改为24脚
DebugSerial.println("CH0OFF");
}
}
}
[/mw_shl_code]
使用MEGA时,把代码里继电器的D6脚改为D24脚。代码烧写完成后,我们现在来搭建硬件。
UNO接线如图:
Foca转串板连接的是D2和D3作为软串口。G要共地。
ITEADUINO MEGA2560接线如图: 此处的Xbee扩展板的跳帽应该是2和3,而不是0和1,此处有错。正确跳帽如下:
. . . 4
._. . 3
. ._. 2
. . . 1
. . . 0
Xbee扩展板插在TX2和RX2这排排母上。如图:
连接电脑,插上9V/1A适配器电源供电,打开Arduino IDE串口监视器就可以查看wifi运行状态了。如果是使用UNO,打开监视器后需要先按一下UNO板子上的重启键再按一下xbee扩展板上的重启键。此时才能看到串口监视信息。使用mega2560则无需操作。如果是出现“Module have no response”则只需要按一下mega板子侧边的重启键。
成功连接路由器后,我们就得到了WiFi模块的IP地址,串口打印信息如下:
↑ UNO和MEGA串口打印的信息
该软件目前只支持4寸-7寸安卓智能手机或者平板,7寸平板的话排版可能会有空隙,不过不影响使用。
下载安装后,进入set up设置界面。在客户端输入我们刚刚获得的IP地址和端口号8080,如图:
点击“开始连接”,连接成功会显示:成功连接server。如图:
按键指令我们重新设置一下,下拉到最下面,将On和Off的指令改为CH0OFF和CH0ON(指令可以任意设置,只要跟代码里的指令一致就行),如果开关状态相反,把指令反过来即可,如图:
↑修改前 ↑修改后
输入完成后,点击“返回”到操作界面,此时点击On和Off就可以成功控制开关了! 关状态(UNO) 开状态(UNO) 关状态(MEGA) 开状态(MEGA)
可以收到串口打印信息如下: ↑ UNO串口打印信息 ↑MEGA串口打印信息
---------------------------------------------以下是2014年10月15日发布----------------------------------
更新说明:由于固件升级,很多小伙伴们收到ESP8266模块后用我们的库调不通,在此诚挚道歉。发布此篇教程的时候使用的是旧版本固件,库文件设置的波特率是115200。如果调不通的话应该收到的是新版本,使用的波特率是9600。库文件我们已经在github上更新了http://pan.baidu.com/s/1sj2nUyT 请知悉,谢谢!
上周终于写完ESP8266 wifi 模块的库了,测试OK!在此开出源码和实例教程,希望能帮到大家!
主要配件:
一张图介绍mini Rboard:
步骤:
1. 下载库文件
烧写程序之前,我们需要用到ESP8266库,下载地址为:
http://pan.baidu.com/s/1sj2nUyT
温馨提示:ESP8266 wifi库文件是基于arduino IDE 1.0.5版本编译的,如遇编译不过,请尝试其他版本。
打开库中的uartWIFI.h文件,因为我们的mini RBoard使用的是跟UNO一样的芯片,所以要在H文件里去掉定义UNO的注释,注销掉MEGA。
#define UNO //#define MEGA
然后把_DBG_RXPIN_和_DBG_TXPIN_引脚定义改为D9和D10.
#define _DBG_RXPIN_ 9 //A0 #define _DBG_TXPIN_ 10 //A1
然后保存uartWIFI.h文件。
烧写代码:
插上FOCA,板子的类型选择“Arduino UNO”,点击烧写程序。如下图:
代码: [mw_shl_code=c,true]/*
ESP8266 library
When you use with UNO board, uncomment the follow line in uartWIFI.h.
#define UNO
When you use with MEGA board, uncomment the follow line in uartWIFI.h.
#define MEGA
Connection:
When you use it with UNO board, the connection should be like these:
ESP8266_TX->D0
ESP8266_RX->D1
ESP8266_CH_PD->3.3V
ESP8266_VCC->3.3V
ESP8266_GND->GND
FTDI_RX->D3 //The baud rate of software serial can't be higher that 19200, so we use software serial as a debug port
FTDI_TX->D2
When you use it with MEGA board, the connection should be like these:
ESP8266_TX->RX1(D19)
ESP8266_RX->TX1(D18)
ESP8266_CH_PD->3.3V
ESP8266_VCC->3.3V
ESP8266_GND->GND
When you want to output the debug information, please use DebugSerial. For example,
DebugSerial.println("hello");
Note: The size of message from ESP8266 is too big for arduino sometimes, so the library can't receive the whole buffer because
the size of the hardware serial buffer which is defined in HardwareSerial.h is too small.
Open the file from \arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h.
See the follow line in the HardwareSerial.h file.
#define SERIAL_BUFFER_SIZE 64
The default size of the buffer is 64. Change it into a bigger number, like 256 or more.
*/
#define SSID "Itead_1(Public)" //type your own SSID name
#define PASSWORD "27955416"0 //type your own WIFI password
#include "uartWIFI.h"
#include <SoftwareSerial.h>
WIFI wifi;
extern int chlID; //client id(0-4)
void setup()
{
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
wifi.begin();
bool b = wifi.Initialize(STA, SSID, PASSWORD);
if(!b)
{
DebugSerial.println("Init error");
}
delay(8000); //make sure the module can have enough time to get an IP address
String ipstring = wifi.showIP();
DebugSerial.println(ipstring); //show the ip address of module
delay(2000);
wifi.confMux(1);
delay(100);
if(wifi.confServer(1,8080))
DebugSerial.println("Server is set up");
}
void loop()
{
char buf[100];
int iLen = wifi.ReceiveMessage(buf);
if(iLen > 0)
{
//mini Rboard D4 pin is relay,mini Rboard URL: http://item.taobao.com/item.htm? ... keTJ&id=39334222369
if (strcmp(buf, "CH0ON") == 0)
{
digitalWrite(4,HIGH);
DebugSerial.println("CH0ON");
}
if (strcmp(buf, "CH0OFF") == 0)
{
digitalWrite(4,LOW);
DebugSerial.println("CH0OFF");
}
/* the other 3 chanels below are for Rboard D5 D6 D7 , Rboard URL: http://item.taobao.com/item.htm? ... keTJ&id=39334222369
if (strcmp(buf, "CH1ON") == 0)
{
digitalWrite(5,HIGH);
DebugSerial.println("CH1ON");
}
if (strcmp(buf, "CH1OFF") == 0)
{
digitalWrite(5,LOW);
DebugSerial.println("CH1OFF");
}
if (strcmp(buf, "CH2ON") == 0)
{
digitalWrite(6,HIGH);
DebugSerial.println("CH2ON");
}
if (strcmp(buf, "CH2OFF") == 0)
{
digitalWrite(6,LOW);
DebugSerial.println("CH2OFF");
}
if (strcmp(buf, "CH3ON") == 0)
{
digitalWrite(7,HIGH);
DebugSerial.println("CH3ON");
}
if (strcmp(buf, "CH3OFF") == 0)
{
digitalWrite(7,LOW);
DebugSerial.println("CH3OFF");
}
*/
}
}[/mw_shl_code]
黏贴代码到arduino IDE中,在SSID和PASSWORD宏定义中修改成自己的路由器WIFI名称和密码。
#define SSID "Itead_1(Public)" //type your own SSID name #define PASSWORD "27955416" //type your own WIFI password
编译,烧写,OK!
接下来我们还需要用到foca来读取串口信息,查看wifi状态。
按照以下连接方式连接FOCA和ESP8266到mini Rboard上。 2015年1月29日修正:此图的foca串口接反了,TX应该接D9,RX接D10。
或者将库文件的9和10反过来。
#define _DBG_RXPIN_ 10 //A0
#define _DBG_TXPIN_ 9 //A1
另外说明:如果使用UNO请提供额外9V/1A适配器供电。Arduino IDE编译版本使用1.0.6以上
硬件连接实物图:
Mini Rboard的引脚定义图: ESP8266的引脚定义图:
然后打开Serial监视器,按一下复位键,等待一段时间后,会看到串口显示它的ip地址:172.16.1.20,当然你也可以登陆路由器的管理后台查看到这个wifi模块的IP地址。
现在我们还需要下载一个软件来进行无线控制。
2. 下载UDP TCP Serverapp
打开手机的Google play,搜索UDP TCP Server,安装该软件。(不能翻墙和没有google账户和不能安装google play的小伙伴自行安装VPN和google play所需app) 打开该软件,点击右上角的settings,将Target IP设置为wifi的IP地址,本文为172.16.1.12,以每次分配的实际IP为准。UPD/TCP选择TCP,TargetPort设置为8080,TCP connectionbehavior设置为“Initiate connection,and keep open”。
然后返回上一级,点击Button Settings。设置buttons的数量为8个(适用于4通道的Rboard),分别在button的名字和命令上修改成:“CH0ON”, “CH1ON”, “CH2ON”, “CH3ON”, “CH0OFF”, “CH1OFF”, “CH2OFF”, “CH3OFF”。这分别代表设置对应继电器通道的开关状态。此次测试用的mini Rboard只需要用到“CH0ON”和“CH0OFF”这一个通道。 返回主页面,我们可以看到按钮的名称已改变,点击对应的按钮后,会看到miniRboard上对应的通道设置为按钮上的状态。
演示视频:
|