硬件准备: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模块工作模式的 好啦,目前我们写好了连接代码, 接下来,我们要把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教程!! admin,如果您要查看本帖隐藏内容请回复 arduino 移植机智云.pdf simpleTry_uno_r3.zip simpleTry_2560.zip |
星星点灯 发表于 2017-4-5 14:32
为什么按你所说的连接后,刚开始可以用,但是过了两三分钟后,就用不了了,串口显示一连串的乱码
...
Suaig 发表于 2017-4-6 22:38
刚开始可以?后来连不了?具体说明一下
梦飞闪灵 发表于 2017-4-8 10:06
可以移植到nano板子上吗?
热爱生活 发表于 2017-4-10 21:47
您好 感谢您提供的方法和步骤
根据您讲解 我将R3版与APP连接完成
但连接成功后 大约几分钟的样子 设备自 ...
热爱生活 发表于 2017-4-10 21:47
您好 感谢您提供的方法和步骤
根据您讲解 我将R3版与APP连接完成
但连接成功后 大约几分钟的样子 设备自 ...
版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )