增加定位器工程
@@ -232,12 +232,22 @@ void split(char *src,const char *separator,char **dest,int *num) {
|
||||
*num = count;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
src ԭʼ<D4AD><CABC>γ<EFBFBD><CEB3><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> 2231.88560,11356.42075 ǰ<><C7B0>γ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>澭<EFBFBD><E6BEAD>
|
||||
lon <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lat <20><><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
|
||||
*****************************************************************************/
|
||||
void Lon_to_f(char *str, float * lon, float * lat)
|
||||
{
|
||||
double longtitude,latitude;
|
||||
int lon_inter=0,lat_inter=0;
|
||||
sscanf(str, "%lf,%lf",&latitude,&longtitude);
|
||||
lon_inter =longtitude/100;
|
||||
*lon =(longtitude - lon_inter*100)/60+lon_inter;
|
||||
|
||||
lat_inter =latitude/100;
|
||||
*lat =(latitude - lat_inter*100)/60+lat_inter;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,280 @@
|
||||
#include "stm32l4xx_hal.h"
|
||||
#include "mcu_init.h"
|
||||
#include "tos_k.h"
|
||||
#include "mqttclient.h"
|
||||
#include "cjson.h"
|
||||
#include "sal_module_wrapper.h"
|
||||
|
||||
|
||||
|
||||
//#define USE_ESP8266
|
||||
//#define USE_NB_BC35
|
||||
//#define USE_BC26
|
||||
//#define USE_EC200S
|
||||
#define USE_M5313
|
||||
|
||||
|
||||
#if defined(USE_ESP8266)
|
||||
#include "esp8266.h"
|
||||
#elif defined(USE_BC26)
|
||||
#include "bc26.h"
|
||||
#elif defined(USE_EC200S)
|
||||
#include "ec200s.h"
|
||||
#elif defined(USE_M5313)
|
||||
#include "m5313.h"
|
||||
|
||||
#endif
|
||||
|
||||
uint8_t module_sel=0; //0---M5313; 1---wifi; 2---BT; 3---Lora
|
||||
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
static hal_uart_port_t esp8266_port = HAL_UART_PORT_0;
|
||||
|
||||
void mqtt_set_esp8266_port(hal_uart_port_t port) {
|
||||
esp8266_port = port;
|
||||
}
|
||||
#endif
|
||||
|
||||
k_event_t report_result_event;
|
||||
k_event_flag_t report_success = 1<<0;
|
||||
k_event_flag_t report_fail = 1<<1;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3BBBAB4><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define MESSAGE_MAX 5
|
||||
|
||||
typedef struct payload_mail_st {
|
||||
void* client;
|
||||
void* payload;
|
||||
} payload_mail_t;
|
||||
k_mail_q_t mail_q;
|
||||
uint8_t mail_pool[MESSAGE_MAX * sizeof(payload_mail_t *)];
|
||||
|
||||
//#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"00000001\",\"params\":{\"location\":\"%s\"}}"
|
||||
#define REPORT_DATA_TEMPLATE "{\"method\":\"report\",\"clientToken\":\"00000001\",\"params\":{\"GPS_Info\":{\"longtitude\":%f,\"latitude\":%f}}}"
|
||||
#define CONTROL_REPLY_DATA "{\"method\":\"control_reply\",\"clientToken\":\"%s\",\"code\":0,\"status\":\"success\"}"
|
||||
|
||||
char report_buf[1024];
|
||||
char reply_buf[200];
|
||||
|
||||
|
||||
static void tos_topic_handler(void* client, message_data_t* msg)
|
||||
{
|
||||
(void) client;
|
||||
cJSON* cjson_root = NULL;
|
||||
cJSON* cjson_status = NULL;
|
||||
cJSON* cjson_method = NULL;
|
||||
cJSON* cjson_params = NULL;
|
||||
cJSON* cjson_relay_status = NULL;
|
||||
cJSON* cjson_client_token = NULL;
|
||||
int relay_status = 0;
|
||||
char* status = NULL;
|
||||
char* method = NULL;
|
||||
char* client_token = NULL;
|
||||
k_event_flag_t event_flag = report_fail;
|
||||
|
||||
int error;
|
||||
mqtt_message_t reply_msg;
|
||||
payload_mail_t payload_mail;
|
||||
|
||||
/* <20><>ӡ<EFBFBD><D3A1>־ */
|
||||
MQTT_LOG_I("-----------------------------------------------------------------------------------");
|
||||
MQTT_LOG_I("%s:%d %s()...\ntopic: %s, qos: %d. \nmessage:\n\t%s\n", __FILE__, __LINE__, __FUNCTION__,
|
||||
msg->topic_name, msg->message->qos, (char*)msg->message->payload);
|
||||
MQTT_LOG_I("-----------------------------------------------------------------------------------\n");
|
||||
|
||||
/* ʹ<><CAB9>cjson<6F><6E><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> */
|
||||
cjson_root = cJSON_Parse((char*)msg->message->payload);
|
||||
if (cjson_root == NULL) {
|
||||
printf("report reply message parser fail\r\n");
|
||||
event_flag = report_fail;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> */
|
||||
cjson_method = cJSON_GetObjectItem(cjson_root, "method");
|
||||
method = cJSON_GetStringValue(cjson_method);
|
||||
|
||||
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ϣ */
|
||||
if (strstr(method, "report_reply")) {
|
||||
|
||||
/* <20><>ȡstatus״̬ */
|
||||
cjson_status = cJSON_GetObjectItem(cjson_root, "status");
|
||||
status = cJSON_GetStringValue(cjson_status);
|
||||
if (cjson_status == NULL || status == NULL) {
|
||||
printf("report reply status parser fail\r\n");
|
||||
event_flag = report_fail;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* <20>ж<EFBFBD>status״̬ */
|
||||
if (strstr(status,"success")) {
|
||||
event_flag = report_success;
|
||||
}else {
|
||||
event_flag = report_fail;
|
||||
}
|
||||
}else if (strstr(method, "control")) {
|
||||
|
||||
//<2F>յ<EFBFBD>ƽ̨<C6BD>·<EFBFBD><C2B7>Ŀ<EFBFBD><C4BF>Ʊ<EFBFBD><C6B1>ģ<EFBFBD><C4A3><EFBFBD>ȡclient_token<65><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>Ӧ
|
||||
cjson_client_token = cJSON_GetObjectItem(cjson_root, "clientToken");
|
||||
client_token = cJSON_GetStringValue(cjson_client_token);
|
||||
|
||||
printf("parse client token:%s\r\n", client_token);
|
||||
|
||||
//<2F><>ȡ relay_status
|
||||
cjson_params = cJSON_GetObjectItem(cjson_root, "params");
|
||||
cjson_relay_status = cJSON_GetObjectItem(cjson_params, "led");
|
||||
relay_status = cjson_relay_status->valueint;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD> relay_status ִ<><D6B4><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
if (relay_status == 0) {
|
||||
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
|
||||
} else if (relay_status == 1) {
|
||||
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
memset(reply_buf, 0, sizeof(reply_buf));
|
||||
sprintf(reply_buf, CONTROL_REPLY_DATA, client_token);
|
||||
memset(&reply_msg, 0, sizeof(reply_msg));
|
||||
reply_msg.qos = QOS0;
|
||||
reply_msg.payload = (void *) reply_buf;
|
||||
|
||||
printf("control reply:\r\n\t%s\r\n", reply_buf);
|
||||
|
||||
error = mqtt_publish(payload_mail.client, "$thing/up/property/CUH3P1QBJD/bd_location", &reply_msg);
|
||||
|
||||
MQTT_LOG_D("control reply publish error is %#0x", error);
|
||||
}
|
||||
|
||||
exit:
|
||||
cJSON_Delete(cjson_root);
|
||||
cjson_root = NULL;
|
||||
status = NULL;
|
||||
|
||||
tos_event_post(&report_result_event, event_flag);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void mqttclient_task(void)
|
||||
{
|
||||
#define BUFFER_SIZE 128
|
||||
int error;
|
||||
|
||||
int lightness = 0;
|
||||
|
||||
float longtitude ; //
|
||||
|
||||
float latitude ;
|
||||
|
||||
mqtt_client_t *client = NULL;
|
||||
|
||||
mqtt_message_t msg;
|
||||
|
||||
k_event_flag_t match_flag;
|
||||
|
||||
char host_ip[20];
|
||||
|
||||
int len;
|
||||
uint8_t *buffer = K_NULL;
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
gps_init(HAL_UART_PORT_3);
|
||||
|
||||
buffer = tos_mmheap_alloc(BUFFER_SIZE);
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
esp8266_sal_init(esp8266_port);
|
||||
esp8266_join_ap("Supowang", "13975428888");
|
||||
#endif
|
||||
|
||||
#ifdef USE_NB_BC35
|
||||
int bc35_28_95_sal_init(hal_uart_port_t uart_port);
|
||||
bc35_28_95_sal_init(HAL_UART_PORT_0);
|
||||
#endif
|
||||
|
||||
#ifdef USE_BC26
|
||||
bc26_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
#ifdef USE_EC200S
|
||||
ec200s_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
#ifdef USE_M5313
|
||||
m5313_sal_init(HAL_UART_PORT_2);
|
||||
#endif
|
||||
|
||||
mqtt_log_init();
|
||||
|
||||
client = mqtt_lease();
|
||||
|
||||
tos_event_create(&report_result_event, (k_event_flag_t)0u);
|
||||
|
||||
/* Domain Format: <your product ID>.iotcloud.tencentdevices.com */
|
||||
tos_sal_module_parse_domain("CUH3P1QBJD.iotcloud.tencentdevices.com",host_ip,sizeof(host_ip));
|
||||
|
||||
/*
|
||||
These infomation is generated by mqtt_config_gen.py tool in "TencentOS-tiny\tools" directory.
|
||||
*/
|
||||
mqtt_set_port(client, "1883");
|
||||
mqtt_set_host(client, host_ip);
|
||||
mqtt_set_client_id(client, "CUH3P1QBJDbd_location");
|
||||
mqtt_set_user_name(client, "CUH3P1QBJDbd_location;21010406;12365;4294967295");
|
||||
mqtt_set_password(client, "9ab897740c13630f7e0fbf182d5bee3f51a2328e;hmacsha1");
|
||||
mqtt_set_clean_session(client, 1);
|
||||
|
||||
error = mqtt_connect(client);
|
||||
|
||||
MQTT_LOG_D("mqtt connect error is %#0x", error);
|
||||
|
||||
error = mqtt_subscribe(client, "$thing/down/property/CUH3P1QBJD/bd_location", QOS0, tos_topic_handler);
|
||||
|
||||
MQTT_LOG_D("mqtt subscribe error is %#0x", error);
|
||||
|
||||
while (1) {
|
||||
|
||||
if((len =gps_read(1,buffer,BUFFER_SIZE))>0)
|
||||
{
|
||||
printf("gps:%s(%d)\n",buffer,len);
|
||||
Lon_to_f(buffer,&longtitude,&latitude);
|
||||
printf("lon=%f;lat=%f\n",longtitude,latitude);
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
|
||||
snprintf(report_buf, sizeof(report_buf), REPORT_DATA_TEMPLATE, longtitude,latitude);
|
||||
|
||||
msg.qos = QOS0;
|
||||
msg.payload = (void *) report_buf;
|
||||
|
||||
error = mqtt_publish(client, "$thing/up/property/CUH3P1QBJD/bd_location", &msg);
|
||||
|
||||
MQTT_LOG_D("mqtt publish error is %#0x", error);
|
||||
|
||||
tos_event_pend(&report_result_event,
|
||||
report_success|report_fail,
|
||||
&match_flag,
|
||||
TOS_TIME_FOREVER,
|
||||
TOS_OPT_EVENT_PEND_ANY | TOS_OPT_EVENT_PEND_CLR);
|
||||
|
||||
if (match_flag == report_success) {
|
||||
printf("report to Tencent IoT Explorer success\r\n");
|
||||
|
||||
}else if (match_flag == report_fail){
|
||||
printf("report to Tencent IoT Explorer fail\r\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
tos_task_delay(5000);
|
||||
}
|
||||
}
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
mqttclient_task();
|
||||
while (1) {
|
||||
printf("This is a mqtt demo!\r\n");
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
}
|
@@ -0,0 +1,451 @@
|
||||
;*******************************************************************************
|
||||
;* File Name : startup_stm32l496xx.s
|
||||
;* Author : MCD Application Team
|
||||
;* Description : STM32L496xx Ultra Low Power devices vector table for MDK-ARM toolchain.
|
||||
;* This module performs:
|
||||
;* - Set the initial SP
|
||||
;* - Set the initial PC == Reset_Handler
|
||||
;* - Set the vector table entries with the exceptions ISR address
|
||||
;* - Branches to __main in the C library (which eventually
|
||||
;* calls main()).
|
||||
;* After Reset the Cortex-M4 processor is in Thread mode,
|
||||
;* priority is Privileged, and the Stack is set to Main.
|
||||
;* <<< Use Configuration Wizard in Context Menu >>>
|
||||
;*******************************************************************************
|
||||
;* @attention
|
||||
;*
|
||||
;* Copyright (c) 2017 STMicroelectronics.
|
||||
;* All rights reserved.
|
||||
;*
|
||||
;* This software component is licensed by ST under BSD 3-Clause license,
|
||||
;* the "License"; You may not use this file except in compliance with the
|
||||
;* License. You may obtain a copy of the License at:
|
||||
;* opensource.org/licenses/BSD-3-Clause
|
||||
;*
|
||||
;*******************************************************************************
|
||||
;
|
||||
; Amount of memory (in bytes) allocated for Stack
|
||||
; Tailor this value to your application needs
|
||||
; <h> Stack Configuration
|
||||
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Stack_Size EQU 0x8000
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
__initial_sp
|
||||
|
||||
|
||||
; <h> Heap Configuration
|
||||
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Heap_Size EQU 0x8000
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||
__heap_base
|
||||
Heap_Mem SPACE Heap_Size
|
||||
__heap_limit
|
||||
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
|
||||
; Vector Table Mapped to Address 0 at Reset
|
||||
AREA RESET, DATA, READONLY
|
||||
EXPORT __Vectors
|
||||
EXPORT __Vectors_End
|
||||
EXPORT __Vectors_Size
|
||||
|
||||
__Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD Reset_Handler ; Reset Handler
|
||||
DCD NMI_Handler ; NMI Handler
|
||||
DCD HardFault_Handler ; Hard Fault Handler
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus Fault Handler
|
||||
DCD UsageFault_Handler ; Usage Fault Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SVC_Handler ; SVCall Handler
|
||||
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD PendSV_Handler ; PendSV Handler
|
||||
DCD SysTick_Handler ; SysTick Handler
|
||||
|
||||
; External Interrupts
|
||||
DCD WWDG_IRQHandler ; Window WatchDog
|
||||
DCD PVD_PVM_IRQHandler ; PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection
|
||||
DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line
|
||||
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
|
||||
DCD FLASH_IRQHandler ; FLASH
|
||||
DCD RCC_IRQHandler ; RCC
|
||||
DCD EXTI0_IRQHandler ; EXTI Line0
|
||||
DCD EXTI1_IRQHandler ; EXTI Line1
|
||||
DCD EXTI2_IRQHandler ; EXTI Line2
|
||||
DCD EXTI3_IRQHandler ; EXTI Line3
|
||||
DCD EXTI4_IRQHandler ; EXTI Line4
|
||||
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
|
||||
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
|
||||
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
|
||||
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
|
||||
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
|
||||
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
|
||||
DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
|
||||
DCD ADC1_2_IRQHandler ; ADC1, ADC2
|
||||
DCD CAN1_TX_IRQHandler ; CAN1 TX
|
||||
DCD CAN1_RX0_IRQHandler ; CAN1 RX0
|
||||
DCD CAN1_RX1_IRQHandler ; CAN1 RX1
|
||||
DCD CAN1_SCE_IRQHandler ; CAN1 SCE
|
||||
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
|
||||
DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15
|
||||
DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16
|
||||
DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17
|
||||
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
|
||||
DCD TIM2_IRQHandler ; TIM2
|
||||
DCD TIM3_IRQHandler ; TIM3
|
||||
DCD TIM4_IRQHandler ; TIM4
|
||||
DCD I2C1_EV_IRQHandler ; I2C1 Event
|
||||
DCD I2C1_ER_IRQHandler ; I2C1 Error
|
||||
DCD I2C2_EV_IRQHandler ; I2C2 Event
|
||||
DCD I2C2_ER_IRQHandler ; I2C2 Error
|
||||
DCD SPI1_IRQHandler ; SPI1
|
||||
DCD SPI2_IRQHandler ; SPI2
|
||||
DCD USART1_IRQHandler ; USART1
|
||||
DCD USART2_IRQHandler ; USART2
|
||||
DCD USART3_IRQHandler ; USART3
|
||||
DCD EXTI15_10_IRQHandler ; External Line[15:10]
|
||||
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line
|
||||
DCD DFSDM1_FLT3_IRQHandler ; DFSDM1 Filter 3 global Interrupt
|
||||
DCD TIM8_BRK_IRQHandler ; TIM8 Break Interrupt
|
||||
DCD TIM8_UP_IRQHandler ; TIM8 Update Interrupt
|
||||
DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation Interrupt
|
||||
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare Interrupt
|
||||
DCD ADC3_IRQHandler ; ADC3 global Interrupt
|
||||
DCD FMC_IRQHandler ; FMC
|
||||
DCD SDMMC1_IRQHandler ; SDMMC1
|
||||
DCD TIM5_IRQHandler ; TIM5
|
||||
DCD SPI3_IRQHandler ; SPI3
|
||||
DCD UART4_IRQHandler ; UART4
|
||||
DCD UART5_IRQHandler ; UART5
|
||||
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors
|
||||
DCD TIM7_IRQHandler ; TIM7
|
||||
DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1
|
||||
DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2
|
||||
DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3
|
||||
DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4
|
||||
DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5
|
||||
DCD DFSDM1_FLT0_IRQHandler ; DFSDM1 Filter 0 global Interrupt
|
||||
DCD DFSDM1_FLT1_IRQHandler ; DFSDM1 Filter 1 global Interrupt
|
||||
DCD DFSDM1_FLT2_IRQHandler ; DFSDM1 Filter 2 global Interrupt
|
||||
DCD COMP_IRQHandler ; COMP Interrupt
|
||||
DCD LPTIM1_IRQHandler ; LP TIM1 interrupt
|
||||
DCD LPTIM2_IRQHandler ; LP TIM2 interrupt
|
||||
DCD OTG_FS_IRQHandler ; USB OTG FS
|
||||
DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6
|
||||
DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7
|
||||
DCD LPUART1_IRQHandler ; LP UART1 interrupt
|
||||
DCD QUADSPI_IRQHandler ; Quad SPI global interrupt
|
||||
DCD I2C3_EV_IRQHandler ; I2C3 event
|
||||
DCD I2C3_ER_IRQHandler ; I2C3 error
|
||||
DCD SAI1_IRQHandler ; Serial Audio Interface 1 global interrupt
|
||||
DCD SAI2_IRQHandler ; Serial Audio Interface 2 global interrupt
|
||||
DCD SWPMI1_IRQHandler ; Serial Wire Interface 1 global interrupt
|
||||
DCD TSC_IRQHandler ; Touch Sense Controller global interrupt
|
||||
DCD LCD_IRQHandler ; LCD global interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD RNG_IRQHandler ; RNG global interrupt
|
||||
DCD FPU_IRQHandler ; FPU
|
||||
DCD CRS_IRQHandler ; CRS error
|
||||
DCD I2C4_EV_IRQHandler ; I2C4 event
|
||||
DCD I2C4_ER_IRQHandler ; I2C4 error
|
||||
DCD DCMI_IRQHandler ; DCMI global interrupt
|
||||
DCD CAN2_TX_IRQHandler ; CAN2 TX
|
||||
DCD CAN2_RX0_IRQHandler ; CAN2 RX0
|
||||
DCD CAN2_RX1_IRQHandler ; CAN2 RX1
|
||||
DCD CAN2_SCE_IRQHandler ; CAN2 SCE
|
||||
DCD DMA2D_IRQHandler ; DMA2D global interrupt
|
||||
|
||||
__Vectors_End
|
||||
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
AREA |.text|, CODE, READONLY
|
||||
|
||||
; Reset handler
|
||||
Reset_Handler PROC
|
||||
EXPORT Reset_Handler [WEAK]
|
||||
IMPORT SystemInit
|
||||
IMPORT __main
|
||||
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
ENDP
|
||||
|
||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||
|
||||
NMI_Handler PROC
|
||||
EXPORT NMI_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
EXPORT HardFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
MemManage_Handler\
|
||||
PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
BusFault_Handler\
|
||||
PROC
|
||||
EXPORT BusFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
UsageFault_Handler\
|
||||
PROC
|
||||
EXPORT UsageFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SVC_Handler PROC
|
||||
EXPORT SVC_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
DebugMon_Handler\
|
||||
PROC
|
||||
EXPORT DebugMon_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
PendSV_Handler PROC
|
||||
EXPORT PendSV_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SysTick_Handler PROC
|
||||
EXPORT SysTick_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
Default_Handler PROC
|
||||
|
||||
EXPORT WWDG_IRQHandler [WEAK]
|
||||
EXPORT PVD_PVM_IRQHandler [WEAK]
|
||||
EXPORT TAMP_STAMP_IRQHandler [WEAK]
|
||||
EXPORT RTC_WKUP_IRQHandler [WEAK]
|
||||
EXPORT FLASH_IRQHandler [WEAK]
|
||||
EXPORT RCC_IRQHandler [WEAK]
|
||||
EXPORT EXTI0_IRQHandler [WEAK]
|
||||
EXPORT EXTI1_IRQHandler [WEAK]
|
||||
EXPORT EXTI2_IRQHandler [WEAK]
|
||||
EXPORT EXTI3_IRQHandler [WEAK]
|
||||
EXPORT EXTI4_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel1_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel2_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel3_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel4_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel5_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel6_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel7_IRQHandler [WEAK]
|
||||
EXPORT ADC1_2_IRQHandler [WEAK]
|
||||
EXPORT CAN1_TX_IRQHandler [WEAK]
|
||||
EXPORT CAN1_RX0_IRQHandler [WEAK]
|
||||
EXPORT CAN1_RX1_IRQHandler [WEAK]
|
||||
EXPORT CAN1_SCE_IRQHandler [WEAK]
|
||||
EXPORT EXTI9_5_IRQHandler [WEAK]
|
||||
EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK]
|
||||
EXPORT TIM1_UP_TIM16_IRQHandler [WEAK]
|
||||
EXPORT TIM1_TRG_COM_TIM17_IRQHandler [WEAK]
|
||||
EXPORT TIM1_CC_IRQHandler [WEAK]
|
||||
EXPORT TIM2_IRQHandler [WEAK]
|
||||
EXPORT TIM3_IRQHandler [WEAK]
|
||||
EXPORT TIM4_IRQHandler [WEAK]
|
||||
EXPORT I2C1_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C1_ER_IRQHandler [WEAK]
|
||||
EXPORT I2C2_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C2_ER_IRQHandler [WEAK]
|
||||
EXPORT SPI1_IRQHandler [WEAK]
|
||||
EXPORT SPI2_IRQHandler [WEAK]
|
||||
EXPORT USART1_IRQHandler [WEAK]
|
||||
EXPORT USART2_IRQHandler [WEAK]
|
||||
EXPORT USART3_IRQHandler [WEAK]
|
||||
EXPORT EXTI15_10_IRQHandler [WEAK]
|
||||
EXPORT RTC_Alarm_IRQHandler [WEAK]
|
||||
EXPORT DFSDM1_FLT3_IRQHandler [WEAK]
|
||||
EXPORT TIM8_BRK_IRQHandler [WEAK]
|
||||
EXPORT TIM8_UP_IRQHandler [WEAK]
|
||||
EXPORT TIM8_TRG_COM_IRQHandler [WEAK]
|
||||
EXPORT TIM8_CC_IRQHandler [WEAK]
|
||||
EXPORT ADC3_IRQHandler [WEAK]
|
||||
EXPORT FMC_IRQHandler [WEAK]
|
||||
EXPORT SDMMC1_IRQHandler [WEAK]
|
||||
EXPORT TIM5_IRQHandler [WEAK]
|
||||
EXPORT SPI3_IRQHandler [WEAK]
|
||||
EXPORT UART4_IRQHandler [WEAK]
|
||||
EXPORT UART5_IRQHandler [WEAK]
|
||||
EXPORT TIM6_DAC_IRQHandler [WEAK]
|
||||
EXPORT TIM7_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel1_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel2_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel3_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel4_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel5_IRQHandler [WEAK]
|
||||
EXPORT DFSDM1_FLT0_IRQHandler [WEAK]
|
||||
EXPORT DFSDM1_FLT1_IRQHandler [WEAK]
|
||||
EXPORT DFSDM1_FLT2_IRQHandler [WEAK]
|
||||
EXPORT COMP_IRQHandler [WEAK]
|
||||
EXPORT LPTIM1_IRQHandler [WEAK]
|
||||
EXPORT LPTIM2_IRQHandler [WEAK]
|
||||
EXPORT OTG_FS_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel6_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel7_IRQHandler [WEAK]
|
||||
EXPORT LPUART1_IRQHandler [WEAK]
|
||||
EXPORT QUADSPI_IRQHandler [WEAK]
|
||||
EXPORT I2C3_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C3_ER_IRQHandler [WEAK]
|
||||
EXPORT SAI1_IRQHandler [WEAK]
|
||||
EXPORT SAI2_IRQHandler [WEAK]
|
||||
EXPORT SWPMI1_IRQHandler [WEAK]
|
||||
EXPORT TSC_IRQHandler [WEAK]
|
||||
EXPORT LCD_IRQHandler [WEAK]
|
||||
EXPORT RNG_IRQHandler [WEAK]
|
||||
EXPORT FPU_IRQHandler [WEAK]
|
||||
EXPORT CRS_IRQHandler [WEAK]
|
||||
EXPORT I2C4_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C4_ER_IRQHandler [WEAK]
|
||||
EXPORT DCMI_IRQHandler [WEAK]
|
||||
EXPORT CAN2_TX_IRQHandler [WEAK]
|
||||
EXPORT CAN2_RX0_IRQHandler [WEAK]
|
||||
EXPORT CAN2_RX1_IRQHandler [WEAK]
|
||||
EXPORT CAN2_SCE_IRQHandler [WEAK]
|
||||
EXPORT DMA2D_IRQHandler [WEAK]
|
||||
|
||||
WWDG_IRQHandler
|
||||
PVD_PVM_IRQHandler
|
||||
TAMP_STAMP_IRQHandler
|
||||
RTC_WKUP_IRQHandler
|
||||
FLASH_IRQHandler
|
||||
RCC_IRQHandler
|
||||
EXTI0_IRQHandler
|
||||
EXTI1_IRQHandler
|
||||
EXTI2_IRQHandler
|
||||
EXTI3_IRQHandler
|
||||
EXTI4_IRQHandler
|
||||
DMA1_Channel1_IRQHandler
|
||||
DMA1_Channel2_IRQHandler
|
||||
DMA1_Channel3_IRQHandler
|
||||
DMA1_Channel4_IRQHandler
|
||||
DMA1_Channel5_IRQHandler
|
||||
DMA1_Channel6_IRQHandler
|
||||
DMA1_Channel7_IRQHandler
|
||||
ADC1_2_IRQHandler
|
||||
CAN1_TX_IRQHandler
|
||||
CAN1_RX0_IRQHandler
|
||||
CAN1_RX1_IRQHandler
|
||||
CAN1_SCE_IRQHandler
|
||||
EXTI9_5_IRQHandler
|
||||
TIM1_BRK_TIM15_IRQHandler
|
||||
TIM1_UP_TIM16_IRQHandler
|
||||
TIM1_TRG_COM_TIM17_IRQHandler
|
||||
TIM1_CC_IRQHandler
|
||||
TIM2_IRQHandler
|
||||
TIM3_IRQHandler
|
||||
TIM4_IRQHandler
|
||||
I2C1_EV_IRQHandler
|
||||
I2C1_ER_IRQHandler
|
||||
I2C2_EV_IRQHandler
|
||||
I2C2_ER_IRQHandler
|
||||
SPI1_IRQHandler
|
||||
SPI2_IRQHandler
|
||||
USART1_IRQHandler
|
||||
USART2_IRQHandler
|
||||
USART3_IRQHandler
|
||||
EXTI15_10_IRQHandler
|
||||
RTC_Alarm_IRQHandler
|
||||
DFSDM1_FLT3_IRQHandler
|
||||
TIM8_BRK_IRQHandler
|
||||
TIM8_UP_IRQHandler
|
||||
TIM8_TRG_COM_IRQHandler
|
||||
TIM8_CC_IRQHandler
|
||||
ADC3_IRQHandler
|
||||
FMC_IRQHandler
|
||||
SDMMC1_IRQHandler
|
||||
TIM5_IRQHandler
|
||||
SPI3_IRQHandler
|
||||
UART4_IRQHandler
|
||||
UART5_IRQHandler
|
||||
TIM6_DAC_IRQHandler
|
||||
TIM7_IRQHandler
|
||||
DMA2_Channel1_IRQHandler
|
||||
DMA2_Channel2_IRQHandler
|
||||
DMA2_Channel3_IRQHandler
|
||||
DMA2_Channel4_IRQHandler
|
||||
DMA2_Channel5_IRQHandler
|
||||
DFSDM1_FLT0_IRQHandler
|
||||
DFSDM1_FLT1_IRQHandler
|
||||
DFSDM1_FLT2_IRQHandler
|
||||
COMP_IRQHandler
|
||||
LPTIM1_IRQHandler
|
||||
LPTIM2_IRQHandler
|
||||
OTG_FS_IRQHandler
|
||||
DMA2_Channel6_IRQHandler
|
||||
DMA2_Channel7_IRQHandler
|
||||
LPUART1_IRQHandler
|
||||
QUADSPI_IRQHandler
|
||||
I2C3_EV_IRQHandler
|
||||
I2C3_ER_IRQHandler
|
||||
SAI1_IRQHandler
|
||||
SAI2_IRQHandler
|
||||
SWPMI1_IRQHandler
|
||||
TSC_IRQHandler
|
||||
LCD_IRQHandler
|
||||
RNG_IRQHandler
|
||||
FPU_IRQHandler
|
||||
CRS_IRQHandler
|
||||
I2C4_EV_IRQHandler
|
||||
I2C4_ER_IRQHandler
|
||||
DCMI_IRQHandler
|
||||
CAN2_TX_IRQHandler
|
||||
CAN2_RX0_IRQHandler
|
||||
CAN2_RX1_IRQHandler
|
||||
CAN2_SCE_IRQHandler
|
||||
DMA2D_IRQHandler
|
||||
|
||||
B .
|
||||
|
||||
ENDP
|
||||
|
||||
ALIGN
|
||||
|
||||
;*******************************************************************************
|
||||
; User Stack and Heap initialization
|
||||
;*******************************************************************************
|
||||
IF :DEF:__MICROLIB
|
||||
|
||||
EXPORT __initial_sp
|
||||
EXPORT __heap_base
|
||||
EXPORT __heap_limit
|
||||
|
||||
ELSE
|
||||
|
||||
IMPORT __use_two_region_memory
|
||||
EXPORT __user_initial_stackheap
|
||||
|
||||
__user_initial_stackheap
|
||||
|
||||
LDR R0, = Heap_Mem
|
||||
LDR R1, =(Stack_Mem + Stack_Size)
|
||||
LDR R2, = (Heap_Mem + Heap_Size)
|
||||
LDR R3, = Stack_Mem
|
||||
BX LR
|
||||
|
||||
ALIGN
|
||||
|
||||
ENDIF
|
||||
|
||||
END
|
||||
|
||||
;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
|
314
board/BDW01-STM32L496VG/doc/5.对接腾讯云与腾讯连连-定位器.md
Normal file
@@ -0,0 +1,314 @@
|
||||
# 定位器
|
||||
在物品、枪支、电动车等需要实时追踪的领域,我们需要获取定位数据并上传到云端或手机端,从而可以查看所在位置。
|
||||
|
||||
在BDW01开发板上,基于TencentOS Tiny,通过中科微定位模块,获取到GPS或北斗定位,然后通过2G模块将定位上传到腾讯云,并通过微信小程序腾讯连连查看实时位置。
|
||||
|
||||
----------
|
||||
# 一、开发板BDW01入门介绍
|
||||
## 1. 开发板特性
|
||||
BDW01物联网开发板的板载资源如下:
|
||||

|
||||
主控芯片采用STM32L4VGTx,Flash空间大小1MB,SRAM空间大小320KB;
|
||||
|
||||
- 板载中移物联NB-IOT模组M5313;
|
||||
- 板载中科微北斗定位模组ATGM336H;
|
||||
- 板载环境光检测传感器TMD27713;
|
||||
- 板载压力传感器BMP280;
|
||||
- 板载温湿度传感器SHT3X;
|
||||
- 板载3D加速度陀螺仪传感器LSM6DSL;
|
||||
- 板载磁力计传感器MMC3680KJ;
|
||||
- 板载E43接口可扩展其他无线通信模块;
|
||||
- 板载E32接口可扩展其他定位模块;
|
||||
- 板载E53传感器标准接口,方便连接各种E53传感器;
|
||||
- 板载0.91'OLED显示屏幕;
|
||||
- 板载新塘语离线音识别模块ISD9160;
|
||||
- 板载TF卡卡座,方便扩展存储空间;
|
||||
- 板载MINI PCIE接口,方便连接4G通信模块;
|
||||
- 板载18650锂电池插座,方便移动时正常供电;
|
||||
- 板载CH340转串口连接,可以使用一根USB线连接至电脑,查看串口日志;
|
||||
|
||||
关于开发板硬件电路的更多信息和详解,请查看文档BDW01主板规格书和原理图。
|
||||
## 2.原理图
|
||||
关键原图图如下:
|
||||
M5313:通讯模块
|
||||

|
||||
ATGM336H:中科微定位模块
|
||||

|
||||
## 3. 开发板硬件准备
|
||||
### 3.1 连接LOG USB线
|
||||

|
||||
### 3.2 连接ST-Link烧录器
|
||||
对照烧录器引脚图和开发板原理图,找到开发板上的网络标号SW11,连接如下:
|
||||
**注意电源正负极不要接反接错,避免烧掉MCU和烧录器。**
|
||||

|
||||
|
||||
- 开发板VCC(3v3) ---> STlink 3.3V
|
||||
- 开发板ST_SWDIO ---> STlink SWDIO
|
||||
- 开发板ST_SWCLK ---> STlink SWCLK
|
||||
- 开发板GND ---> STlink GND
|
||||
|
||||
## 4. 开发软件的环境准备
|
||||
### 4.1 软件开发工具的下载安装
|
||||
我们使用的软件开发工具是Keil公司的MDK(Microcontroller Development kit),MDK官网下载地址:[http://www2.keil.com/mdk5](http://www2.keil.com/mdk5)
|
||||
|
||||
下载的版本最好在5.24或5.24以上,本次介绍以5.25版本为例,双击MDK524应用程序文件,接着点击next>>。
|
||||
|
||||

|
||||
|
||||
在I agree前面的小方框打勾,表示同意该安装协议,再点击next>>。
|
||||
|
||||

|
||||
|
||||
选择安装路径,默认情况下会安装在系统盘C盘,建议在其他盘建立单独的文件夹,并选择安装到该文件夹下。点击next>>。
|
||||
|
||||

|
||||
|
||||
填上我们的信息后,继续next>>。
|
||||
|
||||

|
||||
|
||||
然后等待安装完成后点击Finish,接着会跳出器件支持包安装界面,点OK再把弹框都叉掉,后续再介绍。最后要激活MDK,导入License,激活MDK后就可以使用了。
|
||||
|
||||

|
||||
|
||||
特别提示:一定要输入License激活MDK软件,建议购买正版License。
|
||||
|
||||
### 4.2 安装器件支持包
|
||||
MDK V4版本安装包里集成了器件的支持包,而MDK V5版本是独立出来的,可以自己下载安装。安装完开发工具MDK V5后,我们需要安装开发板主芯片型号对应的芯片器件支持包。
|
||||
#### 4.2.1 安装方式一
|
||||
登录官网:[http://www.keil.com/dd2/pack/](http://www.keil.com/dd2/pack/)
|
||||
下载Keil.STM32L4xx_DFP.x.x.x.pack 完成后,双击打开安装。
|
||||
#### 4.2.2 安装方式二
|
||||
MDK软件上在线安装,一般下载速度会比较慢,更新时间很长,不推荐。
|
||||
打开软件,在导航栏打开Pack安装界面,弹出包安装提示点击ok选项。
|
||||

|
||||
进入在线安装界面,选择STM32L4XX Pack,点击Install进行安装。
|
||||

|
||||
|
||||
### 4.3 CH340串口驱动安装
|
||||
BDW01开发板板载USB转串口芯片,所以使用USB线将开发板连接到电脑,就在串口调试助手查看串口输出的LOG信息。使用串口调试助手之前需要下载安装CH340转串口芯片的驱动。直接在网上搜索下载CH340转串口芯片的驱动,下载完成后打开驱动安装程序点击安装即可。
|
||||

|
||||
|
||||
### 4.4 串口调试助手的安装与使用
|
||||
工具下载网址:[http://www.daxia.com/download/sscom.rar](http://www.daxia.com/download/sscom.rar)
|
||||
下载完成后,解压,双击打开串口调试助手执行程序,直接使用。
|
||||

|
||||
使用USB线一端接开发板LOG USB串口,另一端连接到电脑,前面安装完CH340转串口芯片的驱动,打开电脑的设备管理器,就可以在端口列表查看PC与开发板之间连接端口号,然后在串口调试助手-端口号处,选择PC和开发板之间的连接端口(我这里显示的是COM15,所以要在串口调试助手中选择COM15)。
|
||||

|
||||
再根据开发板串口波特率设置串口调试助手-波特率,开发板程序波特率设置为115200,所以在串口调试助手中选择115200波特率。最后打开串口就可以使用了。
|
||||
|
||||
### 4.5 ST-Link驱动的下载与安装
|
||||
前面2.2介绍过开发板与ST-Link烧录器的接线方式,在使用烧录器将程序烧录到开发板之前,需要安装烧录器的驱动。
|
||||
在ST官网下载ST-Link驱动STSW-LINK009,下载网址:
|
||||
[https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html](https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html)
|
||||
|
||||
再根据电脑系统安装驱动,32位电脑系统安装dpinst_x86.exe,64位电脑系统安装dpinst_amd64.exe 。
|
||||

|
||||
|
||||
运行对应的驱动执行程序,开始安装ST-Link V2驱动,最后点击完成。
|
||||

|
||||
|
||||
安装完成后, 将开发板电源打开,将连着开发板的烧录器通过USB接口连至电脑。
|
||||
|
||||
打开电脑上的设备管理器。若可以看到通用串行总线设备-STM32 STLink,表示驱动安装成功,如下图所示。
|
||||

|
||||
|
||||
## 5. 代码下载
|
||||
[https://github.com/Tencent/TencentOS-tiny](https://github.com/Tencent/TencentOS-tiny "https://github.com/Tencent/TencentOS-tiny")
|
||||
|
||||
# 三、操作步骤
|
||||
## 1.云端操作步骤
|
||||
登录[腾讯云物联网开发平台(IoT Explorer)](https://cloud.tencent.com/product/iotexplorer "腾讯云物联网开发平台(IoT Explorer)"),点击“立即使用”进入控制台,个人开发可以使用微信进行登录。
|
||||
### 1.1 新建项目
|
||||
项目是为了用户面对不同的产品迭代或不同的项目角色而设计的一种隔离机制,便于用户清晰管理物联网项目,并能灵活地配置项目权限。
|
||||
|
||||
1. 项目下可以建立多个产品与应用,应用默认有权限访问该项目下的所有产品;
|
||||
2. 每个项目会有自己的唯一 ID,数据会根据项目进行隔离,以确保数据安全;
|
||||
3. 项目删除后,该项目所属产品等数据都将被删除且不能恢复;
|
||||
4. 开发平台提供资源级的权限控制,可为不同的子用户分配项目级、产品级的权限控制;
|
||||
|
||||
点击新建项目,填写项目名称和简介:
|
||||

|
||||
|
||||
### 1.2. 产品开发
|
||||
#### 1.2.1 新建产品
|
||||
点击项目名称进入到该项目中,点击新建产品:
|
||||

|
||||
填写产品的一些信息:
|
||||
1. 产品名称:名称为中文、字母、数字、下划线的组合,1 - 20位且不能为空。
|
||||
2. 产品品类:选择您所创建产品的所属品类,不同类型产品的属性、事件等数据模板会有所不同。详情请参见 数据模板。
|
||||
3. 设备类型:设备使用2G/3G/4G/Wi-Fi无线通信或有线通信方式,网关可提供云端通信能力,帮助设备与平台通信。
|
||||
4. 认证方式:物联网开发平台提供两种认证方式用于设备与平台之间鉴权认证。
|
||||
证书认证:在创建设备时,平台将为设备生成一个证书文件和一个私钥文件,实现设备与云之间的双向认证。
|
||||
密钥认证:在创建设备时,使用平台为设备随机生成的 PSK。
|
||||
5. 通信方式:您可以选择 Wi-Fi、移动蜂窝(2G/3G/4G)和其他通信方式。
|
||||
6. 数据协议:默认采用数据模板的数据协议,您也可以自定义协议进行透传。
|
||||
7. 描述:字数不能超过80个,您可以根据需要选填。
|
||||

|
||||
产品新建成功后,可在产品列表页查看到“定位追踪”。
|
||||

|
||||
#### 1.2.2 新建功能
|
||||
|
||||
点击“定位追踪”进入。
|
||||
|
||||
系统会自动生成标准功能,参照下图将其他不必须的删除
|
||||

|
||||
##### 1.2.2.1
|
||||
|
||||
添加功能,增加GPS定位
|
||||
|
||||
在后面腾讯连连里也需要这个
|
||||

|
||||
##### 1.2.2.2
|
||||
|
||||
json格式为:
|
||||

|
||||
```c
|
||||
{
|
||||
"version": "1.0",
|
||||
"profile": {
|
||||
"ProductId": "CUH3P1QBJD",
|
||||
"CategoryId": "550"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "lac",
|
||||
"name": "地区区域码",
|
||||
"desc": "地区区域码",
|
||||
"required": true,
|
||||
"mode": "r",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"unit": "",
|
||||
"step": "1",
|
||||
"min": "0",
|
||||
"max": "32",
|
||||
"start": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cid",
|
||||
"name": "基站码",
|
||||
"desc": "基站码",
|
||||
"required": true,
|
||||
"mode": "r",
|
||||
"define": {
|
||||
"type": "int",
|
||||
"unit": "",
|
||||
"step": "1",
|
||||
"min": "0",
|
||||
"max": "32",
|
||||
"start": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "GPS_Info",
|
||||
"name": "GPS定位",
|
||||
"desc": "",
|
||||
"mode": "rw",
|
||||
"define": {
|
||||
"type": "struct",
|
||||
"specs": [
|
||||
{
|
||||
"id": "longtitude",
|
||||
"name": "GPS经度",
|
||||
"dataType": {
|
||||
"type": "float",
|
||||
"min": "-180",
|
||||
"max": "180",
|
||||
"start": "0",
|
||||
"step": "0.001",
|
||||
"unit": "度"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "latitude",
|
||||
"name": "GPS纬度",
|
||||
"dataType": {
|
||||
"type": "float",
|
||||
"min": "-90",
|
||||
"max": "90",
|
||||
"start": "0",
|
||||
"step": "0.001",
|
||||
"unit": "度"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"required": false
|
||||
}
|
||||
],
|
||||
"events": [],
|
||||
"actions": []
|
||||
}
|
||||
```
|
||||
### 1.3 创建测试设备
|
||||
在【设备调试】页面中,单击【新建设备】,设备名为 bd_location:
|
||||

|
||||
## 2. 设备侧操作
|
||||
使用 Keil-MDK 打开 mqttclientiotexplorerlocation 工程:
|
||||
TencentOS-tiny\board\BDW01-STM32L496VG\KEIL\mqttclient_iot_explorer_locator_ll
|
||||

|
||||
### 2.1 配置使用的网络设备
|
||||
打开mqttclient_iot_explorer_locator_ll.c
|
||||
|
||||
打开M5313宏定义
|
||||

|
||||
#### 2.1.1 修改MQTT对接参数
|
||||
|
||||
在腾讯云物联网开发平台可以看到一些产品ID、设备ID、设备秘钥三个参数,如图:
|
||||

|
||||
接下来进入TencentOS-tiny仓库中的tools目录,使用python运行脚本mqttconfiggen.py,按照提示输出刚刚在平台查询到的三个参数,脚本会自动生成mqtt配置参数:
|
||||

|
||||
① 输入产品ID;
|
||||
② 输入设备名称
|
||||
③ 输入设备秘钥;
|
||||
④ ⑤ 保持默认,直接回车;
|
||||
⑥ 需要的生成信息。
|
||||
接下来在代码中修改配置信息:
|
||||

|
||||
#### 2.1.2 修改mqtt对接topic
|
||||
|
||||
设备向云端上报数据的topic如下:
|
||||
|
||||
上行请求 Topic: $thing/up/property/{ProductID}/{DeviceName}
|
||||
|
||||
上行响应 Topic: $thing/down/property/{ProductID}/{DeviceName}
|
||||
|
||||
修改代码,首先根据自己的产品ID和设备ID修改上报topic:
|
||||

|
||||
|
||||

|
||||
然后修改订阅topic:
|
||||

|
||||
打开2g模块M5313和GPS的串口接收:
|
||||

|
||||
#### 2.1.3 编译下载
|
||||
|
||||
修改完成之后编译工程,下载到开发板中,重新上电开始运行,在串口助手中查看打印日志:
|
||||

|
||||
#### 2.1.4 上报定位
|
||||
GPS获取到定位时,串口会打印GPS定位信息:
|
||||

|
||||
同时将定位上传到云端, 在云端查看上报日志:
|
||||

|
||||
## 3. 腾讯连连小程序操作步骤
|
||||
### 3.1 在平台测添加面板
|
||||

|
||||
选择免开发面板
|
||||

|
||||
### 3.2 添加家庭
|
||||
手机端在【微信】搜索【腾讯连连】小程序,首次使用需要进入后点击【我的】->【家庭管理】,添加一个你喜欢的名称即可。
|
||||
### 3.3 添加设备
|
||||
进入后在中下方点击+号,开始扫描二维码
|
||||

|
||||

|
||||
在腾讯云物联网开发平台进入【设备调试】,点击对应设备后的【二维码】:
|
||||

|
||||
腾讯连连扫描此二维码即可成功添加设备,添加成功之后如图:
|
||||

|
||||
给设备上电,等一会可以看到设备上线,等待拿到定位,点进去可以看到设备的位置
|
||||

|
||||
|
||||
开发板购买链接地址二维码:
|
||||

|
BIN
board/BDW01-STM32L496VG/doc/image/locator01.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator02.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator03.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator04.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator05.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator06.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator07.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator08.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator09.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator10.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator11.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator12.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator13.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator14.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator15.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator16.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator17.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator18.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator19.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator20.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator21.png
Normal file
After Width: | Height: | Size: 173 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator22.png
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator23.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator24.png
Normal file
After Width: | Height: | Size: 532 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/locator25.png
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
board/BDW01-STM32L496VG/doc/image/sch01.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/sch02.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
board/BDW01-STM32L496VG/doc/image/sell.png
Normal file
After Width: | Height: | Size: 30 KiB |