来源:elecfans.com 发布时间:Jan 6, 2021, 5:55:00 PM 原地址:http://www.elecfans.com/d/1452069.html

本文实现ArduinoUNOR3通过ESP8266-01模块连接机智云平台,从而实现用手机APP远程点亮LED灯。

ESP8266模块本地调试

1

当我们参考机智云官网给的教程时,关于Arduino平台主要都是关于机智云官方自己的开发板Gokit的资料。但当我们只使用ArduinoUNOR3接入机智云平台,有很多教程通过添加了两个按键来选择airlink和softap模式,其实我们只要在本地给ESP8266配好了网络连接,就不需要每次通过按键切换配网模式。

第一步:首先在官网下载机智云固件GAgent,

6469d834-4f98-11eb-8b86-12bb97331649.jpg

第二步:使用ESP8266下载工具ESPFlashDownloadTool,将固件下载至ESP8266中。

64c1b8c4-4f98-11eb-8b86-12bb97331649.png

第三步:在机智云官网下载机智云串口调试助手,

650806ee-4f98-11eb-8b86-12bb97331649.jpg

将ESP8266通过串口转USB工具插在电脑上,安装好驱动,选择中确的驱动后,打开串口,填入在官网申请的product_key和ProductSecret后,就能在右边看见数据点了,此时再打开指令界面,点击AirLink命令,ESP8266就进入了自动配网模式;

第四步:下载机智云移动端APP

65586d8c-4f98-11eb-8b86-12bb97331649.jpg

打开APP,点击一键配置,输入家里的WiFi账号及密码,选择乐鑫,因为刚才我们已经将ESP8266设置成AirLink透传模式,现在通过APP就可以将家里的WiFi信息发送给ESP8266,此时APP发现新设备下会出现你的WiFi模组,点击后就会看到你定义的数据点了。

硬件搭建

2

2.1硬件连接图

659dd7aa-4f98-11eb-8b86-12bb97331649.jpg

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