更新时间:2024-11-20 02:13:23下载pdf
本文介绍如何使用涂鸦 MCU SDK 为设备获取天气数据。
MCU 发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x03 |
命令字 | 1 | 0x20 |
数据长度 | 2 | N((L+K)+(L+K)+…) |
数据 | Data |
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
例:0x55aa 03 20 0010 06 77 2e 68 75 6d 69 64 69 74 79 06 77 2e 70 6d 32 35 08 77 2e 64 61 74 65 2e 37 e9
支持预报的参数,再获取时需要添加上需要预报的数据天数,最多可支持获取 7 天内的数据。
示例:
w.humidity, w.date.1
:要当天的空气湿度预报数据w.humidity, w.date.7
:要以当天为开始,7 天内的空气湿度预报数据不支持预报的数据,获取时不可添加上天数内容。
示例:w.pm2.5
当获取的参数是和时间有关的参数时,需要搭配 t.unix
或者 t.local
使用,需要获取的参数数据是按照格林时间还是本地时间。
示例:
模组返回的日出时间为格林时间。时间格式:年-月-日 时:分
模组返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x20 |
数据长度 | 2 | 0x0002 |
数据 | 2 |
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
例:0x55aa 00 20 0002 0100 22
下发天气数据,在打开天气数据功能后模组,定时下发。
模组发送
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x21 |
数据长度 | 2 | N |
数据 | 2 |
|
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
例:
MCU 模组返回
字段 | 字节数 | 说明 |
---|---|---|
帧头 | 2 | 0x55aa |
版本 | 1 | 0x00 |
命令字 | 1 | 0x21 |
数据长度 | 2 | 0x0000 |
数据 | 2 | 无 |
校验和 | 1 | 从帧头开始,按字节求和,得出的结果对 256 求余 |
例:0x55aa 00 21 0000 20
宏定义:
/******************************************************************************
是否开启天气功能
如需要请开启该宏,并在 protocol.c 文件内 weather_open_return_handle 与 weather_data_user_handle 两个用户处理函数中实现显示等代码
此两函数内#err 提示,完成函数后请删除该#err
开启天气功能,串口数据缓存区的大小要开大一些
******************************************************************************/
//#define WEATHER_ENABLE //打开天气功能
#ifdef WEATHER_ENABLE
/* 在 protocol.c 文件中 weather_choose 数组中可调整,然后将打开服务的类型数目写到此宏定义 */
#define WEATHER_CHOOSE_CNT 4 //选择的需要天气服务类型的数目
/* 在打开天气服务时,可以设置此宏定义选择天气预报的天数,1 表示当天天气(不需要预报可设置为 1),最多为 7 天(不可以设置成 0 或大于 7) */
#define WEATHER_FORECAST_DAYS_NUM 1 //设置天气预报的天数
#endif
天气数据参数选择数组,用户可以自定义需要的参数:
#ifdef WEATHER_ENABLE
/**
* @var weather_choose
* @brief 天气数据参数选择数组
* @note 用户可以自定义需要的参数,注释或者取消注释即可,注意更改。以文档内容为准。
*/
const char *weather_choose[WEATHER_CHOOSE_CNT] = {
"temp",
"humidity",
"pm25",
/*"pressure",
"realFeel",
"uvi",
"tips",
"windDir",
"windLevel",
"windSpeed",
"sunrise",
"sunset",
"aqi",
"so2 ",
"rank",
"pm10",
"o3",
"no2",
"co",
"conditionNum",*/
};
#endif
打开天气功能返回用户自处理函数:
/**
* @brief 打开天气功能返回用户自处理函数
* @param[in] {res} 打开天气功能返回结果
* @ref 0:失败
* @ref 1:成功
* @param[in] {err} 错误码
* @return Null
* @note MCU 需要自行实现该功能
*/
void weather_open_return_handle(unsigned char res, unsigned char err)
{
#error "请自行完成打开天气功能返回数据处理代码,完成后请删除该行"
unsigned char err_num = 0;
if(res == 1) {
//打开天气返回成功
}else if(res == 0) {
//打开天气返回失败
//获取错误码
err_num = err;
}
}
天气数据用户自处理函数:
/**
* @brief 天气数据用户自处理函数
* @param[in] {name} 参数名
* @param[in] {type} 参数类型
* @ref 0:Int 型
* @ref 1:String 型
* @param[in] {data} 参数值的地址
* @param[in] {day} 哪一天的天气 0:表示当天 取值范围:0~6
* @ref 0:今天
* @ref 1:明天
* @return Null
* @note MCU 需要自行实现该功能
*/
void weather_data_user_handle(char *name, unsigned char type, const unsigned char *data, char day)
{
#error "这里仅给出示例,请自行完善天气数据处理代码,完成后请删除该行"
int value_int;
char value_string[50];//由于有的参数内容较多,这里默认为 50。您可以根据定义的参数,可以适当减少该值
my_memset(value_string, '\0', 50);
//首先获取数据类型
if(type == 0) { //参数是 INT 型
value_int = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
}else if(type == 1) {
my_strcpy(value_string, data);
}
//注意要根据所选参数类型来获得参数值!!!
if(my_strcmp(name, "temp") == 0) {
printf("day:%d temp value is:%d\r\n", day, value_int); //int 型
}else if(my_strcmp(name, "humidity") == 0) {
printf("day:%d humidity value is:%d\r\n", day, value_int); //int 型
}else if(my_strcmp(name, "pm25") == 0) {
printf("day:%d pm25 value is:%d\r\n", day, value_int); //int 型
}else if(my_strcmp(name, "condition.num") == 0) {
printf("day:%d condition value is:%s\r\n", day, value_string); //string 型
}
}
打开天气功能:
all 中列出了所有当前支持的天气信息,根据需要双击选择。
selected 中显示当前已选天气信息,双击可取消选择。
完成后点击 打开天气功能,天气数据会自动下发,具体在模组首次上电或每隔 30min 下发一次。
接收到的数据 RX:
55 aa 00 21 00 2f 01 06 77 2e 74 65 6d 70 00 04 00 00 00 23 06 77 2e 70 6d 32 35 00 04 00 00 00 11 c7
01
表示获取天气数据成功,
以第二组数据 06 77 2e 70 6d 32 35 00 04 00 00 00 11
为例:
06
:参数名 w.pm25
的长度,77 2e 70 6d 32 35
:转换为字符为 w.pm25,00 04
:天气为数值(00),天气长度 04,00 00 00 11
:转换为十进制数据为 17,表示当前 PM2.5 的数据量为 17。以下示例,以中国大陆地区的设备为参考示例。
MCU 发送:{"w.temp","w.humidity"}
或 {"w.temp","w.humidity","w.currdate"}
模组返回:
{
"w.temp":13,
"w.humidity":100
}
查询返回的数据,为预报型数据,请将当天的预报数据,与实时数据做好区别使用。
MCU 发送:{"w.humidity","w.date.1"}
模组返回:
{
"w.humidity.0":100
}
MCU 发送:{"w.humidity","w.date.3"}
模组返回:
{
"w.humidity.0":100,
"w.humidity.1":100,
"w.humidity.2":100
}
MCU 发送:{"w.temp","w.humidity","w.date.3","w.currdate"}
模组返回:
{
"w.temp":13,
"w.humidity":100
"w.humidity.0":100,
"w.humidity.1":100,
"w.humidity.2":100
}
格林时间(以 UTC +8 时区为例)
MCU 发送:{ "w.humidity","w.sunrise","w.sunset","t.unix","w.date.3" }
模组返回:
{
"w.humidity.0":100,
"w.sunrise.0":"2019-12-27 00:05",
"w.sunset.0":"2019-12-27 10:54",
"w.humidity.1":100,
"w.sunrise.1":"2019-12-28 00:05",
"w.sunset.1":"2019-12-28 10:54",
"w.humidity.2":100,
"w.sunrise.2":"2019-12-29 00:05",
"w.sunset.2":"2019-12-29 10:54"
}
本地时间(以 UTC +8 时区为例)
MCU 发送:{ "w.humidity","w.sunrise","w.sunset","t.local","w.date.3" }
模组返回:
{
"w.humidity.0":100,
"w.sunrise.0":"2019-12-27 08:05",
"w.sunset.0":"2019-12-27 18:54",
"w.humidity.1":100,
"w.sunrise.1":"2019-12-28 08:05",
"w.sunset.1":"2019-12-28 18:54",
"w.humidity.2":100,
"w.sunrise.2":"2019-12-29 08:05",
"w.sunset.2":"2019-12-29 18:54"
}
MCU 发送:{ "w.temp","w.humidity","w.pm10","w.pm25","w.date.3" }
模组返回:
{
"w.pm10.0":14,
"w.pm25.0":7,
"w.humidity.0":100,
"w.humidity.1":100,
"w.humidity.2":100
}
若 MCU 的入参 w.date.n
中,n
>7 或者 n
<=0 时,云端按照数据入参异常,此时无返回数据。
天气数据参数 | 含义 | 中国大陆 | 其他国家或地区 | 是否支持预报 | 长度 | 十六进制 |
---|---|---|---|---|---|---|
w.temp | 大气温度,单位:摄氏度 ℃ | 支持 | 支持 | 支持 7 天内数据,中国大陆地区不支持 | 6 | 77 2e 74 65 6d 70 |
w.humidity | 空气湿度 | 支持 | 支持 | 支持 7 天内数据 | 10 | 77 2e 68 75 6d 69 64 69 74 79 |
w.conditionNum | 天气概况数字编码 | 支持 | 支持 | 支持 7 天内数据 | 14 | 77 2e 63 6f 6e 64 69 74 69 6f 6e 4e 75 6d |
w.pressure | 大气气压,单位:毫巴 mbar | 支持 | 支持 | 支持 7 天内数据,中国大陆地区不支持 | 10 | 77 2e 70 72 65 73 73 75 72 65 |
w.realFeel | 体感温度 | 支持 | 支持 | 不支持 7 天内数据 | 10 | 77 2e 72 65 61 6c 46 65 65 6c |
w.uvi | 紫外线指数 | 支持 | 支持 | 支持 7 天内数据 | 5 | 77 2e 75 76 69 |
w.sunrise | 日出 | 支持 | 支持 | 支持 7 天内数据 | 9 | 77 2e 73 75 6e 72 69 73 65 |
w.sunset | 日落 | 支持 | 支持 | 支持 7 天内数据 | 8 | 77 2e 73 75 6e 73 65 74 |
t.unix | 格林时间,搭配日出(w.sunrise )和日落(w.sunset )使用 |
- | - | - | 6 | 74 2e 75 6e 69 78 |
t.local | 本地时间,搭配日出(w.sunrise )和日落(w.sunset )使用 |
- | - | - | 7 | 74 2e 6c 6f 63 61 6c |
w.windSpeed | 风速,单位:米/秒(m/s) | 支持 | 支持 | 支持 7 天内数据 | 11 | 77 2e 77 69 6e 64 53 70 65 65 64 |
w.windDir | 风向 | 支持 | 支持 | 支持 7 天内数据 | 9 | 77 2e 77 69 6e 64 44 69 72 |
w.windLevel | 风级 | 仅中国大陆地区支持 | 不支持 | 支持 7 天内数据 | 11 | 77 2e 77 69 6e 64 4c 65 76 65 6c |
w.aqi | 空气质量指数,采用美国 EPA 标准:0 ~ 500 | 支持 | 支持 | 仅有当天数据 | 5 | 77 2e 61 71 69 |
w.rank/w.quality | 详细 AQI 实况及全国排名 | 仅中国大陆地区支持 | 不支持 | 仅有当天数据 | 6 | 77 2e 72 61 6e 6b / 77 2e 71 75 61 6c 69 74 79 |
w.pm10 | 可吸入颗粒物 PM10,单位:µg/m³ | 支持 | 支持 | 仅有当天数据 | 6 | 77 2e 70 6d 31 30 |
w.pm25 | 细颗粒物 PM2.5,单位:µg/m³ | 支持 | 支持 | 仅有当天数据 | 6 | 77 2e 70 6d 32 35 |
w.o3 | 臭氧浓度,单位:µg/m³ | 支持 | 支持 | 仅有当天数据 | 4 | 77 2e 6f 33 |
w.no2 | 二氧化氮浓度,单位:µg/m³ | 支持 | 支持 | 仅有当天数据 | 5 | 77 2e 6e 6f 32 |
w.co | 一氧化碳浓度,单位:µg/m³ | 支持 | 支持 | 仅有当天数据 | 4 | 77 2e 63 6f |
w.so2 | 二氧化硫浓度 ,单位:µg/m³ | 支持 | 支持 | 仅有当天数据 | 5 | 77 2e 73 6f 32 |
w.thigh | 最高温度,单位:摄氏度 ℃) | 支持 | 支持 | 仅有预报数据 | 7 | 77 2e 74 68 69 67 68 |
w.tlow | 最低温度 ,单位:摄氏度 ℃) | 支持 | 支持 | 仅有预报数据 | 6 | 77 2e 74 6c 6f 77 |
w.date.n | 需要预报的天数,用 n 来表示天数,要求 1<= n <=7 |
支持 | 支持 | - | 8 | 77 2e 64 61 74 65 2e 6e |
w.currdate | 实时天气获取 | 支持 | 支持 | - | 10 | 77 2e 63 75 72 72 64 61 74 65 |
WindDir
为风向字段。为风向简码,详细编码表请参考 附录五。
w.conditionNum
表示天气情况编码,详细编码表请参考 附录四。
大气气压单位说明:
1 毫巴(mbar)=1 百帕斯卡(hPa),即 1mbar = 100pa = 1hpa。
例如,中国大陆地区的墨迹天气数据单位是百帕斯卡(hPa)。
是否支持预报:携带 w.date.n
字段时,返回预报数据。
是否支持实时:当携带 w.date.n
字段访问时,若需要实时天气数据,请携带 w.currdate
字段。具体实时数据的访问方式,请参考 天气预报服务功能示例。
标识 | 描述 | 类型 | 长度 | 十六进制 |
---|---|---|---|---|
c.area | 区县或城市名称 | 字符串 | 6 | 63 2e 61 72 65 61 |
c.city | 城市名称 | 字符串 | 6 | 63 2e 63 69 74 79 |
c.province | 省 | 字符串 | 10 | 63 2e 70 72 6f 76 69 6e 63 65 |
当天气服务访问时返回的数据仅有城市服务字段,且内容为空时,则说明设备无经纬度信息,无法获取天气数据。可打开手机应用的获取定位功能后,重新进行设备配网。
标识 | 描述 | 类型 | 是否支持实时 | 是否支持预报 |
---|---|---|---|---|
w.temp | 温度 | 整数 | 是 | 仅中国大陆地区不支持 |
w.humidity | 湿度 | 整数 | 是 | 是 |
w.conditionNum | 天气概况数字编码 | 字符串 | 是 | 是 |
w.pressure | 气压 | 整数 | 是 | 仅中国大陆地区不支持 |
w.realFeel | 温度实感 | 整数 | 是 | 否 |
w.uvi | 紫外线指数 | 整数 | 是 | 是 |
w.windDir | 风向 | 字符串 | 是 | 是 |
w.windLevel | 风等级 | 整数 | 仅中国大陆地区支持 | 否 |
w.windSpeed | 风速 | 字符串,数据格式为 1.0;0.5 | 是 | 是 |
w.sunrise | 日出时间 | 字符串,数据格式为 2017-04-24 05:24 | 是 | 是 |
w.sunset | 日落时间 | 字符串,数据格式为 2017-04-24 18:32 | 是 | 是 |
w.aqi | 空气质量指数 | 整数 | 是 | 否 |
w.pm25 | PM 2.5 | 整数 | 是 | 否 |
w.so2 | 二氧化硫浓度 | 整数 | 是 | 否 |
w.rank/w.quality | 空气评分 | 字符串,数据格式为 447/609 | 仅中国大陆地区支持 | 否 |
w.pm10 | PM 10 | 整数 | 是 | 否 |
w.o3 | 臭氧(O3)浓度 | 整数 | 是 | 否 |
w.no2 | 二氧化氮(NO2)浓度 | 整数 | 是 | 否 |
w.co | 一氧化碳(CO)浓度 | 整数 | 是 | 否 |
w.qualityLevel | 空气质量评分等级 | 整形 | 是 | 否 |
w.thigh | 最高温度 | 整形 | 否 | 是 |
w.tlow | 最低温度 | 整形 | 否 | 是 |
w.date.n
字段访问时,若需要实时天气数据请携带w.currdate
字段。具体实时数据的访问方式,请参考 天气预报服务功能示例。w.date.n
字段时,返回预报数据。编码表示(ASCII 码) w.conditionNum |
十六进制 | 天气状况 |
---|---|---|
120 | 31 32 30 | 晴 |
101 | 31 30 31 | 大雨 |
102 | 31 30 32 | 雷暴 |
103 | 31 30 33 | 沙尘暴 |
104 | 31 30 34 | 小雪 |
105 | 31 30 35 | 雪 |
106 | 31 30 36 | 冻雾 |
107 | 31 30 37 | 暴雨 |
108 | 31 30 38 | 局部阵雨 |
109 | 31 30 39 | 浮尘 |
110 | 31 31 30 | 雷电 |
111 | 31 31 31 | 小阵雨 |
112 | 31 31 32 | 雨 |
113 | 31 31 33 | 雨夹雪 |
114 | 31 31 34 | 尘卷风 |
115 | 31 31 35 | 冰粒 |
116 | 31 31 36 | 强沙尘暴 |
117 | 31 31 37 | 扬沙 |
118 | 31 31 38 | 小到中雨 |
119 | 31 31 39 | 大部晴朗 |
121 | 31 32 31 | 雾 |
122 | 31 32 32 | 阵雨 |
123 | 31 32 33 | 强阵雨 |
124 | 31 32 34 | 大雪 |
125 | 31 32 35 | 特大暴雨 |
126 | 31 32 36 | 暴雪 |
127 | 31 32 37 | 冰雹 |
128 | 31 32 38 | 小到中雪 |
129 | 31 32 39 | 少云 |
130 | 31 33 30 | 小阵雪 |
131 | 31 33 31 | 中雪 |
132 | 31 33 32 | 阴 |
133 | 31 33 33 | 冰针 |
134 | 31 33 34 | 大暴雨 |
136 | 31 33 36 | 雷阵雨伴有冰雹 |
137 | 31 33 37 | 冻雨 |
138 | 31 33 38 | 阵雪 |
139 | 31 33 39 | 小雨 |
140 | 31 34 30 | 霾 |
141 | 31 34 31 | 中雨 |
142 | 31 34 32 | 多云 |
143 | 31 34 33 | 雷阵雨 |
144 | 31 34 34 | 中到大雨 |
145 | 31 34 35 | 大到暴雨 |
146 | 31 34 36 | 晴朗 |
风向简码(字符串) | 十六进制 | 描述 |
---|---|---|
N | 4e | 北 |
NNE | 4e 4e 45 | 东北偏北 |
NE | 4e 45 | 东北 |
ENE | 45 4e 45 | 东北偏东 |
E | 45 | 东 |
ESE | 45 53 45 | 东南偏东 |
SE | 53 45 | 东南 |
SSE | 53 53 45 | 东南偏南 |
S | 53 | 南 |
SSW | 53 53 57 | 西南偏南 |
SW | 53 57 | 西南 |
WSW | 57 53 57 | 西南偏西 |
W | 57 | 西 |
WNW | 57 4e 57 | 西北偏西 |
NW | 4e 57 | 西北 |
NNW | 4e 4e 57 | 西北偏北 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈