本帖最后由 硬件漫漫之路 于 2017-7-4 08:48 编辑
这次给大家介绍IntoRobot怎么获取环境温度与湿度,并且控制小灯的亮灭。在这里IntoRobot设备获取数据“CMD-JSON”,这里需要我们对其解析,
下面是解析过程举例
/*********************************************************
aJsonClass aJson;
aJsonObject *root = aJson.parse((char *)payload);
if(root == NULL)
{
aJson.deleteItem(root);
return;
}
aJsonObject *_switch = aJson.getObjectitem(root, "switch");
if(_switch != NULL)
{
int SwitchKey = atoi(_switch->valuestring);
}
aJson.deleteItem(root);
*****************************************************/
大家一定记的要调用 aJson.deleteItem(root) 杀死创造的进程
熟悉了解析JCON数据后,就可以对上传数据分析,编写自己需要实现的功能
为了项目购买了一个DHT11来获取环境温度和湿度的模块,data数据引脚接D0
编写自己的app应用,下面就是我布局和设计的上位机,配置获取的数据可以看到
附上详细的代码
#include
#define LED_STATUS "channel/widget_0/data/light"
#define LED_CMD "channel/widget_0/cmd/control"
#define STRING_STATUS "channel/widget_0/data/string"
#define RULE_STATUS "channel/widget_0/data/ruler"
#define TEMPERATURE_STATUS "channel/widget_0/data/temperature"
#define HUMIDITY_STATUS "channel/widget_0/data/humidity"
#define SWITCH_PIN D7
unsigned char LedNum;
DHT11 dht11 = DHT11(D0);
void switchCb(uint8_t *payload, uint32_t len)
{
aJsonClass aJson;
aJsonObject *root = aJson.parse((char *)payload);
if(root == NULL)
{
aJson.deleteItem(root);
return;
}
aJsonObject *_switch = aJson.getObjectItem(root, "switch");
if(_switch != NULL)
{
LedNum++;
int SwitchKey = atoi(_switch->valuestring);
if(SwitchKey)
{
digitalWrite(SWITCH_PIN, HIGH); // 打开开关
IntoRobot.publish(LED_STATUS, 1);
IntoRobot.publish(STRING_STATUS, "电灯打开");
}
else
{
digitalWrite(SWITCH_PIN, LOW); // 关闭开关
IntoRobot.publish(LED_STATUS, 0);
IntoRobot.publish(STRING_STATUS, "电灯关闭");
}
}
aJson.deleteItem(root);
}
void setup()
{
// put your setup code here, to run once.
dht11.begin();
pinMode(SWITCH_PIN, OUTPUT);
IntoRobot.subscribe(LED_CMD, NULL, switchCb);
}
unsigned char airTemperature,airHumidity;
void loop()
{
airTemperature = dht11.ReadTemperature(0);
airHumidity = dht11.ReadHumidity();
IntoRobot.publish(RULE_STATUS, LedNum);
IntoRobot.publish(TEMPERATURE_STATUS, airTemperature);
IntoRobot.publish(HUMIDITY_STATUS, airHumidity);
}
下面一行是实现的效果图
可以看出该项目是一个综合练习的一个好项目,设计到数据的上传与指令的下传。
该项目仅仅是练手,等待下一篇:
最终章:追日太阳能系统项目报告。
追加视频地址:
http://v.youku.com/v_show/id_XMj ... j.8428770.3416059.1[media]http://v.youku.com/v_show/id_XMjg2NjA0NjczMg==.html?spm=a2h3j.8428770.3416059.1[/media]