ESP8266 Centre + NB
宏定义 | 函数 | 变量
app_study_room.c 文件参考
#include "app_study_room.h"
#include "nb_bc35.h"
app_study_room.c 的引用(Include)关系图:

宏定义

#define DEVICE_QAUNTITY   6
 

函数

void StudyRoom_UpdataData (uint8 *msg_string)
 更新本地数据 更多...
 
uint8StudyRoom_GetStatusHex (uint8 room_no)
 将一个房间所有用电器的状态转成 Hex 字符串 更多...
 
void StudyRoom_ReportData (DecodeMessageId mid, uint8 room_no, uint8 *(*get_hex)())
 

变量

RoomMessage room_message [4] = {{0x11}, {0x12}, {0x13}, {0x14}}
 四个房间的环境信息 更多...
 
uint32 room_status [4]
 四个房间的用电器状态信息 更多...
 

详细描述


作者
Gump
版本
V0.1
日期
2020-01-29

宏定义说明

#define DEVICE_QAUNTITY   6

函数说明

void StudyRoom_UpdataData ( uint8 msg_string)

更新本地数据

  • 更新单个房间的环境信息
  • 更新单个房间的单个用电器的状态

单次调用时,环境信息和用电器状态信息不同时更新

  • 由各个房间的client节点发送到本节点的tcp server上,msg_string来自于tcp_server_recv()
参数
[in]msg_string信息指令串
  • 0xFF 作为标志位:室内环境信息
  • 0xFE 作为标志位:用电器状态信息
参见
room_status
room_message
139  {
140 
141  uint8 hexstr[128];
142 
143  if (msg_string[0] == 0xFF)
144  {
145  /* msg_string[1] 房间编号,取值范围[1..4] */
146  os_memcpy((room_message + msg_string[1] - 1), msg_string + 2, 4 );
147 
148  }
149  else if (msg_string[0] == 0xFE)
150  {
151  // StudyRoom_GetStatusHex(msg_string[1], hexstr);
152  // ESP_DEBUG("status str now is: %s, num is %d", hexstr, room_status[0]);
153 
154  /* 位运算 先将目标用电器位置零,再将指令赋值给目标用电器位 */
155  *(room_status + (msg_string[1] - 1)) &= ~(0x01 << (8 * msg_string[2] + msg_string[3]));
156  *(room_status + (msg_string[1] - 1)) |= ((uint32)msg_string[4] << (8 * msg_string[2] + msg_string[3]));
157 
158  // StudyRoom_GetStatusHex(msg_string[1], hexstr);
159  // ESP_DEBUG("status str now is: %s, num is %d", hexstr, room_status[0]);
160  }
161 
162 }
RoomMessage room_message[4]
四个房间的环境信息
Definition: app_study_room.c:59
#define os_memcpy
Definition: osapi.h:36
uint32 room_status[4]
四个房间的用电器状态信息
Definition: app_study_room.c:119
unsigned char uint8
Definition: c_types.h:43
unsigned int uint32
Definition: c_types.h:52
uint8* StudyRoom_GetStatusHex ( uint8  room_no)

将一个房间所有用电器的状态转成 Hex 字符串

注解
数据格式与IoT平台的编解码插件保持一致
参数
[in]room_no需要转换的房间编号
返回
uint8* 转换后的字符串
参见
room_status
174  {
175 
176  uint8 i,j;
177  bool one_status; /* 一个用电器的状态, 只用一个数据位表示开关即可 */
178  static uint8 out_hexstr[128]; /* 转换后的字符串,必须指定成static类型才能return */
179  uint8 *current_pos = out_hexstr; /* 指向当前 out_hexstr 位置的指针 */
180 
181  for (i = DEVICE_FAN; i <= DEVICE_AC; i++) {
182 
183  /* 在每类用电器前面加上该类用电器的数量 */
184  os_sprintf(current_pos, "%02X", DEVICE_QAUNTITY);
185  current_pos += 2;
186 
187  for(j = 0; j < DEVICE_QAUNTITY; j++, current_pos += 2 ) {
188 
189  /* 先定位某个房间某一类用电器的状态,再定位具体的单个用电器状态 */
190  /* 可以结合用电器状态的“数组数据分布”来理解,参阅 room_status[] 的注释 */
191  one_status = (((*(room_status + room_no - 1) >> (8 * i)) & 0x000000ff) >> j) & 0x01;
192  os_sprintf(current_pos, "%02X", one_status);
193  }
194 
195  ESP_DEBUG("out_hexstr = %s", out_hexstr);
196  }
197 
198  return out_hexstr;
199 }
#define os_sprintf
Definition: osapi.h:54
#define DEVICE_QAUNTITY
Definition: app_study_room.c:24
#define ESP_DEBUG(fmt,...)
Definition: driver/uart.h:35
uint32 room_status[4]
四个房间的用电器状态信息
Definition: app_study_room.c:119
Definition: app_study_room.h:36
unsigned char uint8
Definition: c_types.h:43
Definition: app_study_room.h:33
void StudyRoom_ReportData ( DecodeMessageId  mid,
uint8  room_no,
uint8 *(*)()  get_hex 
)
201  {
202 
203  NB_ReportData(mid, get_hex(room_no));
204 
205 }
void NB_ReportData(uint8 mid, uint8 *data_str)
上报数据到云端
Definition: nb_bc35.c:42

函数调用图:

变量说明

RoomMessage room_message[4] = {{0x11}, {0x12}, {0x13}, {0x14}}

四个房间的环境信息

ROOM_NO 取值范围为 [1, 4], 对应四个房间

  • room_message[ROOM_NO - 1] = ROOM_NO对应房间的环境信息
注解
由RoomMessage中的messageId成员来区分不同房间的上报数据,与华为IoT平台中产品的编解 码插件保持一致
信息指令串
各个子节点传输信息到主节点的通讯信息格式

室内环境信息指令串的信息标志位为 0xFF

 ------------------------------------------------------------------------------------
 |        |                          BODY                                 |         |
 | HEADER | ------------------------------------------------------------- | TRAILER |
 |        | ROOM_NO | ENV_CROWD_DENSITY | ENV_TEMP | ENV_HUMI | ENV_NOISE |         |
 ------------------------------------------------------------------------------------
 |  0xFF  | 1,2,3,4 |      [0,100]      |  [0,50]  |  [0,100] | [30,130]  |   0xFF  |
 |        |         |         %         |    ℃    |    %RH   |    db     |         |
 ------------------------------------------------------------------------------------
参见
RoomMessage
uint32 room_status[4]

四个房间的用电器状态信息

ROOM_NO 取值范围为 [1, 4], 对应四个房间

  • room_status[ROOM_NO - 1][7..0] = 风扇用电器状态
  • room_status[ROOM_NO - 1][15..8] = 电灯用电器状态
  • room_status[ROOM_NO - 1][23..16] = 窗帘用电器状态
  • room_status[ROOM_NO - 1][31..24] = 空调用电器状态

每一个数据位表示一个用电器的状态,0为关,1为开

数据位与用电器编号相对应。目前代码最大支持每类用电器包含 8 个用电器

数组数据分布
 -----------------------------------------------------------------
 |                    room_status[ROOM_NO - 1]                   |
 |-------------------------------------------------------------- |
 |     31..24    |     23..16    |     15..8     |      7..0     |
 -----------------------------------------------------------------
 | 空调用电器状态 | 窗帘用电器状态 | 电灯用电器状态 | 风扇用电器状态 |
 - ---------------------------------------------------------------

数据示例:

room_status[ROOM_NO - 1][7..0] = 0x1B

 -------------------------------------------------------------------------------------
 |                           room_status[ROOM_NO - 1][7..0]                          |
 |---------------------------------------------------------------------------------- |
 |    7    |    6     |    5    |    4     |    3    |    2     |    1    |    0     |
 -------------------------------------------------------------------------------------
 |    0    |    0     |    0    |    1     |    1    |    0     |    1    |    1     |
 -------------------------------------------------------------------------------------
 | 风扇八关 | 风扇七关 | 风扇六关 | 风扇五开 | 风扇四开 | 风扇三关 | 风扇二开 | 风扇一开 |
 -------------------------------------------------------------------------------------
信息指令串
各个子节点传输信息到主节点的通讯信息格式

用电器状态信息指令串的信息标志位为 0xFE

 ------------------------------------------------------------------------
 |        |                              BODY                 |         |
 | HEADER | ------------------------------------------------- | TRAILER |
 |        | ROOM_NO | DEVICE_TYPE | DEVICE_NO | DEVICE_STATUS |         |
 ------------------------------------------------------------------------
 | 0xFE   | 1,2,3,4 |   0,1,2,3   |  1,2,3,4  |     0,1       |   0xFE  |
 ------------------------------------------------------------------------
待办事项:
增加用电器数量数组,并于用电器状态一起封装成结构体