add Tencent Cloud explorer lora demo
develop guide, see http://iwiki.oa.com/pages/viewpage.action?pageId=46342556
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user