Arduino UNO R3通过ESP8266-01模块连接机智云平台的实现

本文实现arduino uno r3通过esp8266-01模块连接机智云平台,从而实现用手机app远程点亮led灯。
esp8266模块本地调试
1
当我们参考机智云官网给的教程时,关于arduino平台主要都是关于机智云官方自己的开发板gokit的资料。但当我们只使用arduino uno r3接入机智云平台,有很多教程通过添加了两个按键来选择airlink和softap模式,其实我们只要在本地给esp8266配好了网络连接,就不需要每次通过按键切换配网模式。
第一步:首先在官网下载机智云固件gagent,
第二步:使用esp8266下载工具espflashdownloadtool,将固件下载至esp8266中。
第三步:在机智云官网下载机智云串口调试助手,
将esp8266通过串口转usb工具插在电脑上,安装好驱动,选择中确的驱动后,打开串口,填入在官网申请的product_key和product secret后,就能在右边看见数据点了,此时再打开指令界面,点击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
《gizwits.h》
#include
《wire.h》
#include
《softwareserial.h》
int
ledpin =
13
;
// led connected to digital pin 13,it‘s used for status
int
myledpin =
4
;
// my led connected to digital pin 4
int
sensorvalue =
0
;
// value read from the pot
bool
varr_led_onoff =
0
;
gizwits
mygizwits;
#define
key1
6
#define
key2
7
#define
key1_short_press
1
#define
key1_long_press
2
#define
key2_short_press
4
#define
key2_long_press
8
#define
no_key
0
#define
key_long_timer
3
unsignedlong
last_keytime
=
0
;
unsignedlong
gokit_time_s(
void

{
return
millis() /
1000
;
}
char
gokit_key1down(
void

{
unsignedlong
keep_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();
return
key1_long_press;
}
}
//until open the key
if
((gokit_time_s() -
last_keytime
) 》 key_long_timer)
{
return
key1_short_press;
}
return
0
;
}
return
0
;
}
return
0
;
}
char
gokit_key2down(
void

{
intunsignedlong
keep_time =
0
;
if
(digitalread(key2) == low)
{
delay(
100
);
if
(digitalread(key2) == low)
{
keep_time = gokit_time_s();
while
(digitalread(key2) == low)
//until open the key
{
if
((gokit_time_s() - keep_time) 》 key_long_timer)
{
last_keytime
= gokit_time_s();
return
key2_long_press;
}
}
if
((gokit_time_s() -
last_keytime
) 》 key_long_timer)
{
return
key2_short_press;
}
return
0
;
}
return
0
;
}
return
0
;
}
/*******************************************************
* function : gokit_keydown
* description : check the gokit key1 or key2 event
* return : key1_long_press key1_short_press
* key2_long_press key2_short_press
* 0-no keydown event.
* add by alex.lin --2014-12-25
******************************************************/
char
gokit_keydown(
void

{
char
ret =
0
;
ret |= gokit_key2down();
ret |= gokit_key1down();
return
ret;
}
void
key_handle(
void

{
/* press for over than 3 second is long press */
switch
(gokit_keydown())
{
case
key1_short_press:
// serial.println(f(“key1_short_press , production test mode ”));
mygizwits.setbindmode(wifi_production_test);
break
;
case
key1_long_press:
// serial.println(f(“key1_long_press ,wifi reset”));
mygizwits.setbindmode(wifi_reset_mode);
break
;
case
key2_short_press:
// serial.println(f(“key2_short_press soft ap mode”));
mygizwits.setbindmode(wifi_softap_mode);
//soft ap mode
break
;
case
key2_long_press:
// serial.println(f(“key2_long_press ,airlink mode”));
digitalwrite(ledpin, high);
// sets the led on
mygizwits.setbindmode(wifi_airlink_mode);
//airlink mode
break
;
default

break
;
}
}
void
setup() {
// put your setup code here, to run once:
serial

begin

9600
);
pinmode(ledpin, output);
// sets the digital pin as output
pinmode(myledpin, output);
// sets the digital pin as output
pinmode(key1, input_pullup);
pinmode(key2, input_pullup);
mygizwits.
begin
();
}
void
wifistatushandle()
{
// 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);
// sets the led off
// 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!”));
}
void
loop() {
//configure network
//if(xxx) //trigger condition
//mygizwits.setbindmode(0x02); //0x01:enter ap mode;0x02:enter airlink mode
/*
unsigned long varw_adcvalue = 0;//add sensor data collection
mygizwits.write(value_adcvalue, varw_adcvalue);
bool varr_led_onoff = 0;
if(mygizwits.hasbeenset(event_led_onoff))
{
mygizwits.read(event_led_onoff,&varr_led_onoff);//address for storing data
}
//binary datapoint handle
*/
sensorvalue = analogread(a0);
unsignedlong
varw_adcvalue = sensorvalue;
//add sensor data collection
mygizwits.write(value_adcvalue, varw_adcvalue);
if
(mygizwits.hasbeenset(event_led_onoff))
{
mygizwits.read(event_led_onoff,&varr_led_onoff);
//address for storing data
}
if
(varr_led_onoff==
1

{
digitalwrite(myledpin, high);
// sets the user led on
}
else
{
digitalwrite(myledpin, low);
// sets the user led off
}
key_handle();
//key handle , network configure
wifistatushandle();
//wifi status handle
mygizwits.process();
}至此,你的esp8266模组就成功连接上机智云服务平台了,无论你在任何地方,无论用wifi和4g都能通过app来控制led等的亮灭了,机智云还提供了app的开源框架,我们可以在此基础上高度自由地定制我们自己的app接入机智云物联网平台。
原文标题:arduino使用esp8266连接机智云物联网平台
文章出处:【微信公众号:机智云开发者】欢迎添加关注!文章转载请注明出处。


CANoe编写CAPL测试脚本的几点思考
基于物联网的智能冰箱系统设计方案
NVIDIA 公布2021财年Q1财报:收入达30.8亿美元,较去年同期增长39%
晶丰明源发行价每股56.68元 募资总额为8.7亿元
iPhone11将采用OLED屏幕材料_与S10和Note10相同
Arduino UNO R3通过ESP8266-01模块连接机智云平台的实现
新松机器人惯性导航AGV搬运系统方案实例
iPhone12系列需求强劲,第一季度出货量高达5500万部
半导体推拉力测试仪具有哪些特点?
莱迪思半导体扩展USB Type-C产品系列
工控系统安全知识大盘点
细数10大最具远见的电子领域探路人
用技术优势消除企业级存储的焦虑
详解ARM Cortex-A32处理器,打造超高能效嵌入式环境
foundry厂是干什么的_foundry厂和fab区别
用NVIDIA Isaac Sim 2022.2模拟未来智能机器人
MicroLED价格4年内将大降
无线电信号的频率及分段
小米6手机最新消息!小米6评测:小米6和小米5S仅相差500元你选谁?小米6和小米5s有什么区别?
显示器研发生产企业彩虹股份发布2022第一季度报告