查看: 244|回复: 2

[原创] 自动代码生成arduino全系列移植

[复制链接]

163

主题

2

好友

1656

积分

版主

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    慵懒
    2016-10-24 09:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-4-10 17:53:16 |显示全部楼层
    手把手把机智云移植到任意arduino uno R3/2560的步骤(不带LOG)
    硬件准备: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模组通信,所以我们不能使用这个串口来作为任何调试信息的输出。
    电路图连接如下:


    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模块工作模式的
    API函数说明:http://docs.gizwits.com/zh-cn/deviceDev/ArduinoUNO/sdk.html


    好啦,目前我们写好了连接代码,
    接下来,我们要把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
    如图:

    好嘞,那我们可以在前面加上日志调试输出了!
    [size=0.83em]图片19.png (15.31 KB, 下载次数: 0)
    下载附件
    [color=rgb(153, 153, 153) !important]2017-3-31 16:43 上传




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

    回复

    使用道具 举报

    0

    主题

    0

    好友

    832

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 230 天

    连续签到: 9 天

    [LV.7]常住居民III

    发表于 2017-4-11 10:49:51 |显示全部楼层

    代码???

    代码???


    请问有谁能下代码了?!...
    回复

    使用道具 举报

    163

    主题

    2

    好友

    1656

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    慵懒
    2016-10-24 09:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-4-14 12:27:33 |显示全部楼层
    x5y4z3 发表于 2017-4-11 10:49
    请问有谁能下代码了?!...

    这。。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-6-28 13:20 , Processed in 0.107053 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部