本文实现ArduinoUNOR3通过ESP8266-01模块连接机智云平台,从而实现用手机APP远程点亮LED灯。
ESP8266模块本地调试
1
当我们参考机智云官网给的教程时,关于Arduino平台主要都是关于机智云官方自己的开发板Gokit的资料。但当我们只使用ArduinoUNOR3接入机智云平台,有很多教程通过添加了两个按键来选择airlink和softap模式,其实我们只要在本地给ESP8266配好了网络连接,就不需要每次通过按键切换配网模式。
第一步:首先在官网下载机智云固件GAgent,
第二步:使用ESP8266下载工具ESPFlashDownloadTool,将固件下载至ESP8266中。
第三步:在机智云官网下载机智云串口调试助手,
将ESP8266通过串口转USB工具插在电脑上,安装好驱动,选择中确的驱动后,打开串口,填入在官网申请的product_key和ProductSecret后,就能在右边看见数据点了,此时再打开指令界面,点击AirLink命令,ESP8266就进入了自动配网模式;
第四步:下载机智云移动端APP
打开APP,点击一键配置,输入家里的WiFi账号及密码,选择乐鑫,因为刚才我们已经将ESP8266设置成AirLink透传模式,现在通过APP就可以将家里的WiFi信息发送给ESP8266,此时APP发现新设备下会出现你的WiFi模组,点击后就会看到你定义的数据点了。
硬件搭建
2
2.1硬件连接图
LED接上220欧姆电阻,连在Arduino的D4上,ESP8266CH-PD和vcc都接高电平。
注意:
在给Arduino烧录程序的时候要断开ESP8266与Arduino的串口连接,否则会有干扰导致代码烧录不成功;
ESP8266-01只能供给3.3v电压,5v电压可能会烧坏WiFi模组
2.2项目源码
#include
#include
#include
intledPin=13;//LEDconnectedtodigitalpin13,it'susedforstatus
intmyledPin=4;//myLEDconnectedtodigitalpin4
intsensorValue=0;//valuereadfromthepot
boolvarR_LED_OnOff=0;
GizwitsmyGizwits;
#defineKEY16
#defineKEY27
#defineKEY1_SHORT_PRESS1
#defineKEY1_LONG_PRESS2
#defineKEY2_SHORT_PRESS4
#defineKEY2_LONG_PRESS8
#defineNO_KEY0
#defineKEY_LONG_TIMER3
unsignedlongLast_KeyTime=0;
unsignedlonggokit_time_s(void)
{
returnmillis()/1000;
}
chargokit_key1down(void)
{
unsignedlongkeep_time=0;
if(digitalRead(KEY1)==LOW)
{
delay(100);
if(digitalRead(KEY1)==LOW)
{
keep_time=gokit_time_s();
while(digitalRead(KEY1)==LOW)
{
if((gokit_time_s()-keep_time)>KEY_LONG_TIMER)
{
Last_KeyTime=gokit_time_s();
returnKEY1_LONG_PRESS;
}
}//untilopenthekey
if((gokit_time_s()-Last_KeyTime)>KEY_LONG_TIMER)
{
returnKEY1_SHORT_PRESS;
}
return0;
}
return0;
}
return0;
}
chargokit_key2down(void)
{
intunsignedlongkeep_time=0;
if(digitalRead(KEY2)==LOW)
{
delay(100);
if(digitalRead(KEY2)==LOW)
{
keep_time=gokit_time_s();
while(digitalRead(KEY2)==LOW)//untilopenthekey
{
if((gokit_time_s()-keep_time)>KEY_LONG_TIMER)
{
Last_KeyTime=gokit_time_s();
returnKEY2_LONG_PRESS;
}
}
if((gokit_time_s()-Last_KeyTime)>KEY_LONG_TIMER)
{
returnKEY2_SHORT_PRESS;
}
return0;
}
return0;
}
return0;
}
/*******************************************************
*function:gokit_keydown
*Description:checkthegokitkey1orkey2event
*return:KEY1_LONG_PRESSKEY1_SHORT_PRESS
*KEY2_LONG_PRESSKEY2_SHORT_PRESS
*0-nokeydownevent.
*AddbyAlex.lin--2014-12-25
******************************************************/
chargokit_keydown(void)
{
charret=0;
ret|=gokit_key2down();
ret|=gokit_key1down();
returnret;
}
voidKEY_Handle(void)
{
/*Pressforoverthan3secondisLongPress*/
switch(gokit_keydown())
{
caseKEY1_SHORT_PRESS:
//Serial.println(F("KEY1_SHORT_PRESS,ProductionTestMode"));
myGizwits.setBindMode(WIFI_PRODUCTION_TEST);
break;
caseKEY1_LONG_PRESS:
//Serial.println(F("KEY1_LONG_PRESS,WifiReset"));
myGizwits.setBindMode(WIFI_RESET_MODE);
break;
caseKEY2_SHORT_PRESS:
//Serial.println(F("KEY2_SHORT_PRESSSoftAPmode"));
myGizwits.setBindMode(WIFI_SOFTAP_MODE);
//SoftAPmode
break;
caseKEY2_LONG_PRESS:
//Serial.println(F("KEY2_LONG_PRESS,AirLinkmode"));
digitalWrite(ledPin,HIGH);//setstheLEDon
myGizwits.setBindMode(WIFI_AIRLINK_MODE);
//AirLinkmode
break;
default:
break;
}
}
voidsetup(){
//putyoursetupcodehere,torunonce:
Serial.begin(9600);
pinMode(ledPin,OUTPUT);//setsthedigitalpinasoutput
pinMode(myledPin,OUTPUT);//setsthedigitalpinasoutput
pinMode(KEY1,INPUT_PULLUP);
pinMode(KEY2,INPUT_PULLUP);
myGizwits.begin();
}
voidwifiStatusHandle()
{
//if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
//Serial.println(F("WIFI_SOFTAP!"));
//
//if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
//Serial.println(F("WIFI_AIRLINK!"));
//
//if(myGizwits.wifiHasBeenSet(WIFI_STATION))
//Serial.println(F("WIFI_STATION!"));
//
if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
digitalWrite(ledPin,LOW);//setstheLEDoff
//Serial.println(F("WIFI_CON_ROUTER!"));
//
//if(myGizwits.wifiHasBeenSet(WIFI_DISCON_ROUTER))
//Serial.println(F("WIFI_DISCON_ROUTER!"));
//
//if(myGizwits.wifiHasBeenSet(WIFI_CON_M2M))
//Serial.println(F("WIFI_CON_M2M!"));
//
//if(myGizwits.wifiHasBeenSet(WIFI_DISCON_M2M))
//Serial.println(F("WIFI_DISCON_M2M!"));
}
voidloop(){
//Configurenetwork
//if(XXX)//TriggerCondition
//myGizwits.setBindMode(0x02);//0x01:EnterAPMode;0x02:EnterAirlinkMode
/*
unsignedlongvarW_ADCValue=0;//AddSensorDataCollection
myGizwits.write(VALUE_ADCVALUE,varW_ADCValue);
boolvarR_LED_OnOff=0;
if(myGizwits.hasBeenSet(EVENT_LED_ONOFF))
{
myGizwits.read(EVENT_LED_ONOFF,&varR_LED_OnOff);//Addressforstoringdata
}
//binarydatapointhandle
*/
sensorValue=analogRead(A0);
unsignedlongvarW_ADCValue=sensorValue;//AddSensorDataCollection
myGizwits.write(VALUE_ADCVALUE,varW_ADCValue);
if(myGizwits.hasBeenSet(EVENT_led_onoff))
{
myGizwits.read(EVENT_led_onoff,&varR_LED_OnOff);//Addressforstoringdata
}
if(varR_LED_OnOff==1)
{
digitalWrite(myledPin,HIGH);//setstheuserLEDon
}
else
{
digitalWrite(myledPin,LOW);//setstheuserLEDoff
}
KEY_Handle();//keyhandle,networkconfigure
wifiStatusHandle();//WIFIStatusHandle
myGizwits.process();
}
至此,你的ESP8266模组就成功连接上机智云服务平台了,无论你在任何地方,无论用WiFi和4G都能通过APP来控制LED等的亮灭了,机智云还提供了APP的开源框架,我们可以在此基础上高度自由地定制我们自己的APP接入机智云物联网平台。
原文标题:机友分享|Arduino使用ESP8266连接机智云物联网平台
文章出处:【微信公众号:机智云开发者】欢迎添加关注!文章转载请注明出处。
责任编辑:haq