STM32/STM8技术论坛
直播中

硬件漫漫之路

7年用户 120经验值
擅长:嵌入式技术
私信 关注
[经验]

【IntoRobot Neutron试用体验】项目累积小步(二):IntoRobot获取环境温度与湿度,并控制小灯

本帖最后由 硬件漫漫之路 于 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
DHT11.png

编写自己的app应用,下面就是我布局和设计的上位机,配置获取的数据可以看到

QQ截图20170703140304.png

QQ图片20170703205721.jpg

附上详细的代码


#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);
}


下面一行是实现的效果图
XX.png
可以看出该项目是一个综合练习的一个好项目,设计到数据的上传与指令的下传。
该项目仅仅是练手,等待下一篇:
最终章:追日太阳能系统项目报告。
追加视频地址: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]


更多回帖

发帖
×
20
完善资料,
赚取积分