微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 项目累积小步(二):IntoRobot获取环境温度与湿度,并控制小灯

项目累积小步(二):IntoRobot获取环境温度与湿度,并控制小灯

时间:10-02 整理:3721RD 点击:

这次给大家介绍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 <DHT11/dht11.h>

#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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top