add Tencent Cloud explorer lora demo

develop guide, see http://iwiki.oa.com/pages/viewpage.action?pageId=46342556
This commit is contained in:
daishengdong
2020-01-02 18:57:31 +08:00
parent 5b194c3d0a
commit a82569d9f3
5 changed files with 242 additions and 75 deletions

View File

@@ -1,30 +1,116 @@
#include "lora_demo.h"
#include "HTS221.h"
#include "RHF76.h"
void lorawan_demo(void)
/*
==================================================================================
data template:
Type Name Token DataType RW Attribute
property temperature temperature integer readonly range: [-100, 155]
initial: 0
step: 1
unit: centigrade
property humidity humidity integer readonly range: [-0, 100]
initial: 0
step: 1
unit: %
property report_period period integer read-write range: [0, 3600]
initial: 0
step: 1
unit: second
==================================================================================
up-link parser javascript:
function RawToProtocol(fPort, bytes) {
var data = {
"method": "report",
"clientToken" : new Date(),
"params" : {}
};
data.params.temperature = bytes[0];
data.params.humidity = bytes[1];
data.params.period = bytes[2] | (bytes[3] << 8);
return data;
}
==================================================================================
down-link parser javascript:
function ProtocolToRaw(obj) {
var data = new Array();
data[0] = 5;// fport=5
data[1] = 0;// unconfirmed mode
data[2] = obj.params.period & 0x00FF;
data[3] = (obj.params.period >> 8) & 0x00FF;
return data;
}
*/
uint16_t report_period = 3000;
typedef struct device_data_st {
uint8_t temperature;
uint8_t humidity;
uint16_t period;
} __PACKED__ dev_data_t;
typedef struct device_data_wrapper_st {
union {
dev_data_t dev_data;
uint8_t serialize[sizeof(dev_data_t)];
} u;
} dev_data_wrapper_t;
dev_data_wrapper_t dev_data_wrapper;
void recv_callback(uint8_t *data, uint8_t len)
{
int count = 1;
extern int rhf76_lora_init(hal_uart_port_t uart_port);
int i = 0;
rhf76_lora_init(HAL_UART_PORT_1);
tos_lora_module_join();
printf("len: %d\n", len);
while (1) {
if (count % 20 == 0) {
printf("############task1 count is %d \r\n",count++);
tos_lora_module_send("test data",sizeof("test data"));
}
count++;
osDelay(500);
for (i = 0; i < len; ++i) {
printf("data[%d]: %d\n", i, data[i]);
}
}
if (len == 1) {
report_period = data[0];
} else if (len >= 2) {
report_period = data[0] | (data[1] << 8);
}
printf("report_period: %d\n", report_period);
}
void application_entry(void *arg)
{
lorawan_demo();
int16_t temperature;
int16_t humidity;
HTS221_Init();
rhf76_lora_init(HAL_UART_PORT_1);
tos_lora_module_recvcb_register(recv_callback);
tos_lora_module_join_otaa("8cf957200000fa57", "8cf957200000fa572059aaaaad204a72");
while (1) {
printf("This is a lorawan demo!\r\n");
tos_task_delay(1000);
HTS221_Get_Temperature(&temperature);
HTS221_Get_Humidity(&humidity);
printf("temperature: %2.1f\n", temperature / 10.0);
printf("humidity : %2.1f\n", humidity / 10.0);
dev_data_wrapper.u.dev_data.temperature = temperature / 10;
dev_data_wrapper.u.dev_data.humidity = humidity / 10;
dev_data_wrapper.u.dev_data.period = report_period;
tos_lora_module_send(dev_data_wrapper.u.serialize, sizeof(dev_data_t));
tos_task_delay(report_period);
}
}