收藏官网首页
查看: 295383|回复: 264

[经验作品] 自动代码生成arduino全系列移植,Arduino联网就那么简单

 

4

主题

22

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
跳转到指定楼层
楼主
发表于 2017-3-31 16:47:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
本帖最后由 Suaig 于 2017-5-3 23:59 编辑

手把手把机智云移植到任意arduino uno R3/2560的步骤(不带LOG)

换句话说,你的手里闲置的Arduino uno R3能具备联网功能了。而且还能体验到Arduino代码自动生成工具和APP代码自动生成工具。 开发更简单啦。

不过需要你准备一块esp8266(当然也能使其他WiFi模块:如汉枫LPB100 TICC3200等等)


硬件准备:
1.烧写了最新机智云固件的WIFI模组
2.Arduino uno R3/2560   
连接准备:模组的串口连接UNO的串口0,模组的串口连接2560的串口3
PS:使用新版自动代码生成。


1.登录机智云,创建数据点。


这里建立了一个布尔型的可写变量作为灯的开关,和一个数值型的电压测量作为举例。


2.利用机智云的自动代码生成,生成arduino uno R3


3.下载下来的目录结构如下:
我们把Gizwits下的所有文件拷贝到examples文件夹的simpleTry文件夹下,对,我们就是用这个简单历程进行修改。


4.打开simpleTry
看到文件结构:

直接编译是会出错的。因为#include <Gizwits.h>。我们并没有安装库,而是直接在同一个文件夹下编译。这里我们把它改成#include “Gizwits.h”,这样就可以编译成功了。然后我们给他添加AIRLINK连网代码和最基本的RESET代码,其实是两个按键扫描。

这里一定要注释掉Serial.println  因为uno R3只有一个串口。我们自动生成的代码已经默认使用了这个串口和WIFI模组通信,所以我们不能使用这个串口来作为任何调试信息的输出。
电路图连接如下:

这里我电路图显示的ESP8266是一个完整最小系统,图中仅仅连接了通讯和工作所使用的TXD,RXD,VCC和GND,完整最小系统电路
Code:
//Configure network
  if(digitalRead(7) == LOW) //Trigger Condition
  {
    delay(10);
    while(digitalRead(7) == LOW);
    myGizwits.setBindMode(WIFI_AIRLINK_MODE);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
    //Serial.println("START_AIRLINK");
  }

  if(digitalRead(8) == LOW) //Trigger Condition
  {
    delay(10);
    while(digitalRead(8) == LOW);
    myGizwits.setBindMode(WIFI_RESET_MODE);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
   // Serial.println("START_RESET");
  }

里面用到一个关键函数myGizwits.setBindMode。这个函数是置WIFI模块工作模式的


好啦,目前我们写好了连接代码,
接下来,我们要把arduino采集到的数据上传到机智云了!
机智云提供了myGizwits.write函数,直接上报相应数据点到服务器。

上传示例代码如下:
这个代码是把A0采集到的电压值上传到服务器。
肯定有人在想,我怎么知道这个类型怎么写呢,这个是在gizwits_product.h中的VALUE_TYPE_T定义的,
你要上报哪个数值,就写哪个数值。

然后我怎么接收服务器的数据呢,
这里添加你对开关按下和打开的处理逻辑。这里开关打开和关闭属于事件,事件的定义在gizwits_protocol.h中的
这里你看到了这里有很多事件。

完整代码:

#include "Gizwits.h"

Gizwits myGizwits;

void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600);
  pinMode(7,INPUT_PULLUP);
  pinMode(8,INPUT_PULLUP);
  myGizwits.begin();
}

void loop() {  
  
  //Configure network
  if(digitalRead(7) == LOW) //Trigger Condition
  {
    delay(10);
    while(digitalRead(7) == LOW);
    myGizwits.setBindMode(WIFI_AIRLINK_MODE);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
   // Serial.println("START_AIRLINK");
  }

  if(digitalRead(8) == LOW) //Trigger Condition
  {
    delay(10);
    while(digitalRead(8) == LOW);
    myGizwits.setBindMode(WIFI_RESET_MODE);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
    //Serial.println("START_RESET");
  }

  if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
  {
   digitalWrite(8,LOW);
   //Serial.println("Success_con_Router");
  }
  else if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
  {
    digitalWrite(8,HIGH);
   //Serial.println("IN_AIR_LINK");
  }
  float varW_Volt = 5 *((float)analogRead(A0)/1024);//Add Sensor Data Collection
  myGizwits.write(VALUE_VOLT, varW_Volt);

  bool varR_led = 0;
  if(myGizwits.hasBeenSet(EVENT_LED))
  {
    myGizwits.read(EVENT_LED,&varR_led);//Address for storing data
    if(varR_led == 1)
    {
      //Serial.println("LED_ON");
    }
    else
    {
      //Serial.println("LED_OFF");
    }
  }
    /*
  float varW_Volt = 0;//Add Sensor Data Collection
  myGizwits.write(VALUE_VOLT, varW_Volt);


  bool varR_led = 0;
  if(myGizwits.hasBeenSet(EVENT_LED))
  {
    myGizwits.read(EVENT_LED,&varR_led);//Address for storing data
  }


  //binary datapoint handle
  */

  myGizwits.process();
}
5.连接方式:
选对应的模组,我这里是乐鑫的,然后进入下一个界面。
这里不是按KEY2了。因为这是开发板上的,我们这里是数字管脚7连接的开关,
连接成功后:

接下来我们讲讲ARDUINO 2560的移植,2560呢有多个串口,所以我们自然可以把串口0作为LOG日志的输出处理了。但是生成的代码默认是用Serial,怎么改?


1.打开Gizwits.cpp  找到所有的Serial改成你所要的串口号,例如Serial3.这里我是用串口3.

这种每次改都很麻烦,我们使用一个宏定义。
#define ESP8266WIFI Serial3
然后把所有的Serial改成 ESP8266WIFI
如图:

好嘞,那我们可以在前面加上日志调试输出了!

如图。。不多说,上代码,

回帖下载源码和完整版PDF教程!!
游客,如果您要查看本帖隐藏内容请回复

9

主题

22

帖子

291

积分

中级会员

Rank: 3Rank: 3

积分
291
推荐
发表于 2017-4-29 21:20:13 | 只看该作者
我使用的楼主的源程序为什么会提示VALUE_VOLT这个未**呢??

3

主题

24

帖子

150

积分

注册会员

Rank: 2

积分
150
推荐
发表于 2017-4-12 21:08:07 | 只看该作者

simpleTry.zip (28.08 KB, 下载次数: 105)

  1. <P> /*****************************************</P>
  2. <P>Name:    Gizwits + ArduinoUnoWiFi Library
  3. Author:  <A href="mailto:tli@gizwits.com">tli@gizwits.com</A> / <A href="mailto:bing@arduino.org.cn">bing@arduino.org.cn</A>
  4. Version: V1.0
  5. Init:    2016-12-23
  6. Modify:   2016-12-23
  7. *******************************************/</P>
  8. <P>//只有一个buer开关数据点
  9. #include "Gizwits.h"
  10. #include <Wire.h></P>
  11. <P>Gizwits myGizwits;</P>
  12. <P>void setup() {
  13.   // put your setup code here, to run once:</P>
  14. <P>  Serial.begin(9600);
  15.   pinMode(7,INPUT_PULLUP);
  16.   pinMode(8,INPUT_PULLUP);
  17.   pinMode(9,INPUT_PULLUP);
  18.      digitalWrite(9,HIGH);//9号数字接口连接led灯 测试是否接收到数据
  19.          delay(500);
  20.          digitalWrite(9,LOW);
  21.          delay(500);
  22.          digitalWrite(9,HIGH);
  23.          delay(500);
  24.          digitalWrite(9,LOW);
  25.   myGizwits.begin();
  26. }</P>
  27. <P>void loop() {  
  28.   
  29.   //Configure network
  30.   //if(XXX) //Trigger Condition
  31.   //myGizwits.setBindMode(0x02);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
  32.     /*
  33.   bool varR_buer = 0;
  34.   if(myGizwits.hasBeenSet(EVENT_BUER))
  35.   {
  36.     myGizwits.read(EVENT_BUER,&varR_buer);//Address for storing data
  37.   }
  38.   //binary datapoint handle
  39.   */
  40. //Configure network
  41.   if(digitalRead(7) == LOW) //Trigger Condition
  42.   {
  43.     delay(10);
  44.     while(digitalRead(7) == LOW);
  45.     myGizwits.setBindMode(WIFI_AIRLINK_MODE);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
  46.    // Serial.println("START_AIRLINK");
  47.   }</P>
  48. <P>
  49.   if(digitalRead(8) == LOW) //Trigger Condition
  50.   {
  51.     delay(10);
  52.     while(digitalRead(8) == LOW);
  53.     myGizwits.setBindMode(WIFI_RESET_MODE);  //0x01:Enter AP Mode;0x02:Enter Airlink Mode
  54.     //Serial.println("START_RESET");
  55.   }</P>
  56. <P>
  57.   if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
  58.   {
  59.    digitalWrite(8,LOW);
  60.    //Serial.println("Success_con_Router");
  61.   }
  62.   else if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
  63.   {
  64.     digitalWrite(8,HIGH);
  65.    //Serial.println("IN_AIR_LINK");
  66.   }
  67.    bool varR_buer = 0;
  68.   if(myGizwits.hasBeenSet(EVENT_BUER))
  69.   {
  70.     myGizwits.read(EVENT_BUER,&varR_buer);//Address for storing data
  71.     digitalWrite(9,HIGH);//9号数字接口连接led灯 测试是否接收到数据
  72.     //测试发现 没有数据
  73.      delay(500);
  74.      digitalWrite(9,LOW);
  75.      delay(500);
  76.      if(varR_buer == 1)
  77.     {
  78.       // //测试发现 没有数据
  79.          digitalWrite(9,HIGH);
  80.          delay(100);
  81.          digitalWrite(9,LOW);
  82.          delay(100);
  83.          digitalWrite(9,HIGH);
  84.          delay(100);
  85.          digitalWrite(9,LOW);
  86.             digitalWrite(9,HIGH);
  87.          delay(100);
  88.          digitalWrite(9,LOW);
  89.          delay(100);
  90.          digitalWrite(9,HIGH);
  91.          delay(100);
  92.          digitalWrite(9,LOW);   digitalWrite(9,HIGH);
  93.          delay(100);
  94.          digitalWrite(9,LOW);
  95.          delay(100);
  96.          digitalWrite(9,HIGH);
  97.          delay(100);
  98.          digitalWrite(9,LOW);
  99.          delay(100);
  100.     }
  101.     else
  102.     {
  103.       //Serial.println("LED_OFF");
  104.       
  105.     }
  106.   }
  107.   myGizwits.process();
  108. }</P>
复制代码

4

主题

22

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
地板
 楼主| 发表于 2017-4-1 20:47:12 | 只看该作者
没人定,自顶

1

主题

30

帖子

374

积分

中级会员

Rank: 3Rank: 3

积分
374
5#
发表于 2017-4-5 07:39:17 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发
精品 一般人看不到

0

主题

10

帖子

90

积分

注册会员

Rank: 2

积分
90
6#
发表于 2017-4-5 14:32:07 | 只看该作者
为什么按你所说的连接后,刚开始可以用,但是过了两三分钟后,就用不了了,串口显示一连串的乱码

点评

刚开始可以?后来连不了?具体说明一下  详情 回复 发表于 2017-4-6 22:38

8

主题

144

帖子

3308

积分

论坛元老

Rank: 8Rank: 8

积分
3308
7#
发表于 2017-4-5 20:41:54 | 只看该作者
来学习的,谢谢

0

主题

2

帖子

26

积分

新手上路

Rank: 1

积分
26
8#
发表于 2017-4-6 10:15:46 | 只看该作者
给对方各方广泛

4

主题

22

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
10#
 楼主| 发表于 2017-4-6 22:38:08 | 只看该作者
汉枫LPB120模块
星星点灯 发表于 2017-4-5 14:32
为什么按你所说的连接后,刚开始可以用,但是过了两三分钟后,就用不了了,串口显示一连串的乱码
...

刚开始可以?后来连不了?具体说明一下

点评

您好 感谢您提供的方法和步骤 根据您讲解 我将R3版与APP连接完成 但连接成功后 大约几分钟的样子 设备自动离线 就没有反应了 另外 设备无法接受到手机发送的数据 请您再做一下 测试 让代码更加稳定实用 谢谢 本  详情 回复 发表于 2017-4-10 21:47

27

主题

89

帖子

742

积分

高级会员

Rank: 4

积分
742
11#
发表于 2017-4-7 08:14:05 | 只看该作者
这个必须要支持。收藏学习下uno+esp8266的工作方式

0

主题

2

帖子

82

积分

注册会员

Rank: 2

积分
82
12#
发表于 2017-4-7 14:18:24 | 只看该作者
好东西,正需要

9

主题

103

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
13#
发表于 2017-4-7 16:15:13 | 只看该作者
教程很详细,多谢

1

主题

4

帖子

196

积分

注册会员

Rank: 2

积分
196
14#
发表于 2017-4-8 10:06:42 | 只看该作者
可以移植到nano板子上吗?

点评

NANO和Mini都可以,参考UNO就行  详情 回复 发表于 2017-4-11 15:48

0

主题

2

帖子

90

积分

注册会员

Rank: 2

积分
90
15#
发表于 2017-4-8 19:43:42 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发
好东西 收下了

0

主题

3

帖子

71

积分

注册会员

Rank: 2

积分
71
16#
发表于 2017-4-9 17:06:29 | 只看该作者
好帖,很难找到

0

主题

2

帖子

42

积分

新手上路

Rank: 1

积分
42
17#
发表于 2017-4-9 22:23:17 | 只看该作者
来学习的,谢谢

3

主题

24

帖子

150

积分

注册会员

Rank: 2

积分
150
18#
发表于 2017-4-10 19:46:49 | 只看该作者
谢谢您的分享 学习了!

3

主题

24

帖子

150

积分

注册会员

Rank: 2

积分
150
19#
发表于 2017-4-10 21:47:06 | 只看该作者
本帖最后由 热爱生活 于 2017-4-10 21:51 编辑
Suaig 发表于 2017-4-6 22:38
刚开始可以?后来连不了?具体说明一下


您好 感谢您提供的方法和步骤
根据您讲解 我将R3版与APP连接完成
但连接成功后 大约几分钟的样子 设备自动离线 就没有反应了
需要重新给板子上电才可以显示在线
另外 设备无法接受到手机发送的数据  
请您再做一下 测试 让代码更加稳定实用 谢谢

本来就马上要放弃机智云了 看了这个帖子 想在试试。

点评

邮箱  详情 回复 发表于 2017-4-11 15:49
可以把代码发给我看看,我这边没问题啊。  详情 回复 发表于 2017-4-11 15:48

4

主题

22

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
20#
 楼主| 发表于 2017-4-11 15:48:14 | 只看该作者
汉枫LPB120模块
梦飞闪灵 发表于 2017-4-8 10:06
可以移植到nano板子上吗?

NANO和Mini都可以,参考UNO就行

4

主题

22

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
21#
 楼主| 发表于 2017-4-11 15:48:57 | 只看该作者
热爱生活 发表于 2017-4-10 21:47
您好 感谢您提供的方法和步骤
根据您讲解 我将R3版与APP连接完成
但连接成功后 大约几分钟的样子 设备自 ...

可以把代码发给我看看,我这边没问题啊。

点评

我也是 arduino R3,8266,过一会就掉线。怎么解决  详情 回复 发表于 2017-4-25 14:24

4

主题

22

帖子

288

积分

中级会员

Rank: 3Rank: 3

积分
288
22#
 楼主| 发表于 2017-4-11 15:49:38 | 只看该作者
热爱生活 发表于 2017-4-10 21:47
您好 感谢您提供的方法和步骤
根据您讲解 我将R3版与APP连接完成
但连接成功后 大约几分钟的样子 设备自 ...

邮箱312251702@qq.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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