收藏官网首页
查看: 414|回复: 4

[资料分享] 【DIY】基于Arduino+esp8266 ESP01的智能插座

发表于 2018-5-14 11:05:54 | 显示全部楼层 |阅读模式
汉枫LPB120模块
前言

前言:(此教程针对新手,大神略过)
我这个人比较懒,挣扎了很久才决定写这个教程,主要是源于闲鱼的很多朋友问教程毕竟我在闲鱼从来不卖东西,偶尔发个玩意分享分享教程,哎呀,平时时间不是太多,最近的学习状态也不是太好,还有比赛,说实话(我计算机二级还没过),最近还要考试,哎呦难得很,理论和现实还是有很大差距的,写了那么久的程序,计算机二级也算是难倒我了,主要是没有太多时间去看那些知识点,风萧萧兮易水寒,今天果断下定决心坐下来,给朋友写一个教程。

我还想说的一些话:有些东西的制作,实践比理论要重要得多,当你拿到esp8266的时候商家或者论坛肯定会给给你一些资料,让你一步一步调AT指令,建服务器,,固然有用,但是你不能从中获得优越感,和成就感,因为你根本没有做出一个能实际远程控制的一个实物,只能慢慢的从入门到放弃,让它吃灰。
  • 1

关于标题:
为什么说是–远程控制智能插座不用入门直接上手 –呢?
1. 有对应的平台服务器可以对接这次试用机智云
2. 服务器自动生成C语言代码
3. 服务器自动生成安卓SDK


机智云平台–http://www.gizwits.com/
为什么不选择onenet?为什么不要选择link?和其他的IOT网站?
因为其他的我都做失败了。。。。。哈哈
备注:我们使用的是mcu方案,为什么不采用soc的嵌入式开发呢,不太适合新手,再说了成本也差不了多少钱,仅仅一个arduino mini板的钱,


材料准备

开始吧,教程开始:
首先时软件准备–机智云账号, arduinoIDE


其次是硬件准备–arduino板,经测试什么样的板子都可以,无论是arduinoR3还是arduino nano还是arduinomini都可以的,

还有esp8266 ESP01
为什么选择ESP01呢?——-便宜呀!!
其次针对mcu方案,没必要买esp12F那样的板子,接线不方便,也没必要。


正式开始
  • 开始注册机智云账号并生成应用并配置数据点,这方面不再详述,如果有需求,下次我再下一个文章,一步一步截图发出来。官方教程如下–http://docs.gizwits.com/zh-cn/quickstart/UseMCU.html
    比如我的插座(带定时功能)
  • 当你按照上面的教程做好之后,不夸张的说,你已经完成了
三分之一

了。哈哈,是不是很简单,
3.烧写固件–这是一个重点!
论坛的资料和教程我试了很多最终一个稳定的方案就是如图的烧写方式

详细教程可以看我的博客园文档
http://www.cnblogs.com/pengwenzheng/p/8053167.html
烧写的固件为机智云官方的固件
下载地址–https://download.gizwits.com/zh-cn/p/92/94

固件烧写完成之后就要进行调试了,使用机智云官方的调试工具进行远程调试,这个时候你就可以在手机下载调试软件实现远程的调试了,


到这里呢,你已经完成

一半

了,剩下的就是到机智云的服务器开发者中心,生成mcu代码,就是机智云自动生成的arduino的ino文件,是不是很舒服的说。。。。。。
流程如下:

接着下载即可:

下载之后就是一个压缩包,接下之后是机智云针对你的应用的库文件。

解压之后打开,只有一个文件名字为–Gizwits
把这个库拷贝到arduinoIDE的库文件夹里即可:不然无法变编译的,大家应该是知道的。
ok到这里差不多

四分之三

了,恩恩,下面的工作就剩代码的调试和硬件的组装了,
代码调试如下:比如我的文件为:D:\1arduino2018\Arduino\libraries\Gizwits\examples
就是解压下来的库文件里面的两个历程:

机智云官方是自动生成两个文件的,一个是联网的文件,一个是针对你设置的数据点的应用的控制代码
好了将两者融合如下:例如我的插座的代码为:

  1. #include <Gizwits.h>
  2. #include <Wire.h>
  3. #include <SoftwareSerial.h>
  4. SoftwareSerial mySerial(A2,A3); // A2 -> RX, A3 -> TX
  5. Gizwits myGizwits;
  6. #define   KEY1              6
  7. #define   KEY2              7
  8. #define   KEY1_SHORT_PRESS  1
  9. #define   KEY1_LONG_PRESS   2
  10. #define   KEY2_SHORT_PRESS  4
  11. #define   KEY2_LONG_PRESS   8
  12. #define   NO_KEY            0
  13. #define   KEY_LONG_TIMER    3
  14. int flag =0;
  15. unsigned long Last_KeyTime = 0;
  16. unsigned long gokit_time_s(void)
  17. {
  18.   return millis() / 1000;
  19. }
  20. char gokit_key1down(void)//按键函数,不用管
  21. {
  22.   unsigned long keep_time = 0;
  23.   if (digitalRead(KEY1) == LOW)
  24.   {
  25.     delay(100);
  26.     if (digitalRead(KEY1) == LOW)
  27.     {
  28.       keep_time = gokit_time_s();
  29.       while (digitalRead(KEY1) == LOW)
  30.       {
  31.         if ((gokit_time_s() - keep_time) > KEY_LONG_TIMER)
  32.         {
  33.           Last_KeyTime = gokit_time_s();
  34.           return KEY1_LONG_PRESS;
  35.         }
  36.       } //until open the key

  37.       if ((gokit_time_s() - Last_KeyTime) > KEY_LONG_TIMER)
  38.       {
  39.         return KEY1_SHORT_PRESS;
  40.       }
  41.       return 0;
  42.     }
  43.     return 0;
  44.   }
  45.   return 0;
  46. }

  47. char gokit_key2down(void)//按键函数不用管。
  48. {
  49.   int unsigned long keep_time = 0;
  50.   if (digitalRead(KEY2) == LOW)
  51.   {
  52.     delay(100);
  53.     if (digitalRead(KEY2) == LOW)
  54.     {
  55.       keep_time = gokit_time_s();
  56.       while (digitalRead(KEY2) == LOW) //until open the key
  57.       {

  58.         if ((gokit_time_s() - keep_time) > KEY_LONG_TIMER)
  59.         {
  60.           Last_KeyTime = gokit_time_s();
  61.           return KEY2_LONG_PRESS;
  62.         }
  63.       }
  64.       if ((gokit_time_s() - Last_KeyTime) > KEY_LONG_TIMER)
  65.       {
  66.         return KEY2_SHORT_PRESS;
  67.       }
  68.       return 0;
  69.     }
  70.     return 0;
  71.   }
  72.   return 0;
  73. }
  74. char gokit_keydown(void)
  75. {
  76.   char ret = 0;
  77.   ret |= gokit_key2down();
  78.   ret |= gokit_key1down();
  79.   return ret;
  80. }
  81. void KEY_Handle(void)//这里是检测按键的函数,不用管
  82. {
  83.   switch (gokit_keydown())
  84.   {
  85.     case KEY1_SHORT_PRESS:
  86.       myGizwits.setBindMode(WIFI_PRODUCTION_TEST);
  87.       break;
  88.     case KEY1_LONG_PRESS:
  89.       myGizwits.setBindMode(WIFI_RESET_MODE);
  90.       break;
  91.     case KEY2_SHORT_PRESS:
  92.       myGizwits.setBindMode(WIFI_SOFTAP_MODE);
  93.       break;
  94.     case KEY2_LONG_PRESS:
  95.       myGizwits.setBindMode(WIFI_AIRLINK_MODE);//这里我自己加了一个如果开启了配网功能,蜂鸣器就响一秒。很好用哦
  96.     digitalWrite(5,HIGH);
  97.     digitalWrite(8,HIGH);
  98.     delay(1000);
  99.    digitalWrite(8,LOW);
  100.    digitalWrite(5,LOW);
  101.       break;
  102.     default:
  103.       break;
  104.   }
  105. }
  106. void wifiStatusHandle()//这个函数我做了修改,因为没什么用。
  107. {
  108.   if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
  109.   {
  110.   }  
  111.   if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
  112.   {
  113.   }
  114. }
  115. void setup() {
  116.   // put your setup code here, to run once:
  117.   mySerial.begin(115200);
  118.    pinMode(KEY1, INPUT_PULLUP);
  119.   pinMode(KEY2, INPUT_PULLUP);
  120.   pinMode(5,OUTPUT);//指示灯
  121.   pinMode(8,OUTPUT);//beeWIFI_AIRLINK成功报警提示这里是配网提示
  122.   pinMode(9,OUTPUT);//接继电器
  123.   digitalWrite(5,LOW);
  124.   digitalWrite(8,LOW);
  125.   digitalWrite(9,HIGH);
  126.   myGizwits.begin();
  127. }
  128. void loop() {  
  129.    KEY_Handle();//key handle , network configure网络配置
  130.   wifiStatusHandle();//WIFI Status Handle无线网络状态处理
  131.   unsigned long varW_back = 0;//Add Sensor Data Collection
  132.   myGizwits.write(VALUE_back, varW_back);
  133.   bool varR_on_off = 0;
  134.   if(myGizwits.hasBeenSet(EVENT_on_off))
  135.   {
  136.     myGizwits.read(EVENT_on_off,&varR_on_off);//Address for storing data
  137.     //////////////////////////////////////////////////////////////////////控制区
  138.      if(varR_on_off==1)
  139.     {
  140.       digitalWrite(9,LOW);
  141.       }
  142.      else
  143.      digitalWrite(9,HIGH);
  144. ////////////////////////////////////////////////////////////////////////////////下面是定时的代码,暂且没有写定时的程序,先不管。
  145.   }
  146.   unsigned long varR_time_h = 0;
  147.   if(myGizwits.hasBeenSet(EVENT_time_h))
  148.   {
  149.     myGizwits.read(EVENT_time_h,&varR_time_h);//Address for storing data
  150.     mySerial.println(F("EVENT_time_h"));
  151.     mySerial.println(varR_time_h,DEC);
  152.   }
  153.   unsigned long varR_time_m = 0;
  154.   if(myGizwits.hasBeenSet(EVENT_time_m))
  155.   {
  156.     myGizwits.read(EVENT_time_m,&varR_time_m);//Address for storing data
  157.     mySerial.println(F("EVENT_time_m"));
  158.     mySerial.println(varR_time_m,DEC);
  159.   }
  160.   //////////////////////////////////////////////////////////////////////////
  161.   myGizwits.process();
  162. }
复制代码

大功告成,装机调试,稳定运行,哎呦累死我了,写了好久,
既然能控制一个设备了,哪2个呢?8个呢?

肯定不是问题喽。

好了教程到此结束,累死了,有什么疑问欢迎下方留言,有问必答!
  • 1


版权**:本文为博主原创文章,未经博主允许不得转载。        https://blog.csdn.net/switch_love_case/article/details/79591616


1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-kit
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

1

主题

26

帖子

292

积分

中级会员

Rank: 3Rank: 3

积分
292
发表于 2018-5-14 20:57:06 | 显示全部楼层
你好,程序编译为什么提示VALUE_back未定义?

点评

原文转自:https://blog.csdn.net/switch_love_case/article/details/79591616 你要问 原博主哦  详情 回复 发表于 2018-5-15 09:47
 楼主| 发表于 2018-5-15 09:47:53 | 显示全部楼层
caikan 发表于 2018-5-14 20:57
你好,程序编译为什么提示VALUE_back未定义?

原文转自:https://blog.csdn.net/switch_love_case/article/details/79591616

你要问 原博主哦
1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-kit
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

1

主题

26

帖子

292

积分

中级会员

Rank: 3Rank: 3

积分
292
发表于 2018-5-15 13:13:08 | 显示全部楼层
Genius 发表于 2018-5-15 09:47
原文转自:https://blog.csdn.net/switch_love_case/article/details/79591616

你要问 原博主哦 ...

谢谢,已经解决,直接用机智云MCU生成的源代码就行,楼主加的程序编译无法通过。

3

主题

29

帖子

1337

积分

金牌会员

Rank: 6Rank: 6

积分
1337
发表于 2018-5-16 01:21:51 | 显示全部楼层
ESP8266模块首单6.8元
你好!可以定时吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表