推薦使用本文之前有一定的嵌入式基礎,請先確保了解以下名詞(提前百度):cJSON,EDP,TCP透傳
首先在ONENET平臺上創建一個TCP透傳的產品,這段在ONENET開發者中心上有很多教程,就不再贅述。
下載一個EdpProtoDebugger
先使用這個工具與ONENET建立連接,具體教程
可以看到,實際上建立與平臺的連接就是通過一個簡單的EDP數據包實現的,我們在嵌入式應用中,只需要先和ONENET的服務器連接,然后發送這一串設備認證的數據包,你的設備就上線了,之后就可以通過發送JSON格式的數據或者是發送分號間隔字符串的方式來進行數據傳輸
tip:本文只介紹以分號間隔字符串的方式發送數據,ONENET服務器下發的命令是JSON 格式的,如果想給設備下發命令,需要移植cJSON解碼。
使用的芯片是stm32f103c8t6,正點原子的esp8266模塊
開始講解程序
#include "esp8266.h"
uint8_t rxbuffer[200];
uint8_t its2=2;
uint8_t checksd[]={0X10,0X31,0X00,0X03,0X45,0X44,0X50,0X01,0X40,0X00,0X80,0X00,0X08,0X32,0X33,0X37,0X37,0X36,0X31,0X34,0X37,0X00,0X1C,
0X62,0X68,0X35,0X42,0X34,0X63,0X4A,0X53,0X4F,0X52,0X79,0X31,0X59,0X56,0X6F, 0X4E ,0X45, 0X30, 0X4B, 0X7A, 0X6C, 0X54, 0X6F, 0X64,
0X6D, 0X67, 0X34, 0X3D }; //Log in Message Get From EDPDEBUGGER
//--------------------DO NOT USE THIS FUNCTION WHILE SENDING DATA !-------------------------------
void Uart_To_Oled(void) //read uart rxbuffer and print it in OLED
{
// OLED_CLS();
USART1->DR=0x0000;
HAL_UART_Receive(&huart1,rxbuffer,200,1000);
OLED_ShowStr(0,0,rxbuffer,1);
memset(rxbuffer,0,sizeof(uint8_t)*200);
}
//------------------------------------------------------------------------------------------------
/*********************Initialize Esp8266*******************************************
****** AT ************** return OK *************************************
****** AT+CWMODE=3****** AP+STATION MODE *************************************
****** AT+RST*********** RESET TO INIT CHANGE ***********************************
****** AT+CWJAP********* JOIN AP ************************************
****** AT+CIFSR********* return AP INFORMATION **********************************
****** AT+CIPSTART x 5** CONNECT TO SERVER **********************************
****** AT+CIPMODE=1***** EDP MODE ***********************************
**********************************************************************************/
void esp8266_Init(void)
{
HAL_UART_Transmit(&huart1, CMD_AT,strlen(CMD_AT),1000);
Uart_To_Oled();
HAL_Delay(200);
HAL_UART_Transmit(&huart1, CMD_CWMODE,strlen(CMD_CWMODE),1000);
Uart_To_Oled();
HAL_Delay(200);
HAL_UART_Transmit(&huart1, CMD_RST,strlen(CMD_RST),1000);
Uart_To_Oled();
HAL_Delay(200);
// HAL_UART_Transmit(&huart1, CMD_CWJAP,strlen(CMD_CWJAP),1000);
// Uart_To_Oled();
// HAL_Delay(1000);
HAL_UART_Transmit(&huart1, CMD_CIFSR,strlen(CMD_CIFSR),1000);
Uart_To_Oled();
HAL_Delay(5000);
// OLED_CLS();
// static uint8_t is=5;
// while(is!=0)
// {
HAL_UART_Transmit(&huart1, CMD_CIPSTART,strlen(CMD_CIPSTART),1000);
Uart_To_Oled();
HAL_Delay(200);
// OLED_CLS();
// is--;
// }
HAL_UART_Transmit(&huart1, CMD_CIPMODE,strlen(CMD_CIPMODE),1000);
Uart_To_Oled();
HAL_Delay(200);
HAL_UART_Transmit(&huart1, CMD_CIPSEND,strlen(CMD_CIPSEND),1000);
Uart_To_Oled();
HAL_Delay(200);
// while(its2!=0)
// {
HAL_Delay(100);
HAL_UART_Transmit(&huart1, checksd,sizeof(checksd),1000);
// Uart_To_Oled();
//OLED_CLS();
// its2--;
// }
// OLED_CLS();
}
因為只是一個簡單的demo,這里沒有移植完整的EDP數據包生成和解包函數,僅僅是用EdpPrototypeDebugger生成了一個固定的數據包,這個數據包連接到的是我預先創建好的測試設備,請自行更改數據包
測試部分,使用了stm32中自帶的溫度傳感器,用freertos建立了兩個個任務,
任務一讀取接收到的信息(因為這個工程中沒有移植cJSON,讀到的數據是cJSON格式,請自行解碼)
任務二不斷采集傳感器信息并發送到服務器(因為這個工程中沒有移植EDPkit,是用EdpPrototypeDebugger生成了一個定長數據,并進行替換)
/**
******************************************************************************
* File Name : freertos.c
* Description : Code for freertos applications
******************************************************************************
* This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* Copyright (c) 2017 STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "cmsis_os.h"
/* USER CODE BEGIN Includes */
#include "gpio.h"
//#include "OLED_I2C.h"
#include "usart.h"
#include "esp8266.h"
#include "adc.h"
/* USER CODE END Includes */
/* Variables -----------------------------------------------------------------*/
osThreadId defaultTaskHandle;
osThreadId SendTempHandle;
osMessageQId myQueue01Handle;
/* USER CODE BEGIN Variables */
extern uint8_t rxbuffer[];
uint8_t message[27]={0X80,0X19,0X80,0X00,0X08,0X32,0X33,0X37,0X37,0X36,0X31,0X34,0X37,0X05,
0X00,0X0B,0X2C,0X3B,0X74,0X65,0X6D,0X70,0X2C,0X31,0X32,0X33,0X34 }; //Data Format Form EDPDEBUGGER
/* USER CODE END Variables */
/* Function prototypes -------------------------------------------------------*/
void StartDefaultTask(void const * argument);
void Tempsend(void const * argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/* USER CODE BEGIN FunctionPrototypes */
/* USER CODE END FunctionPrototypes */
/* Hook prototypes */
/* Init FreeRTOS */
void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* USER CODE BEGIN RTOS_MUTEX */
/* add mutexes, ... */
/* USER CODE END RTOS_MUTEX */
/* USER CODE BEGIN RTOS_SEMAPHORES */
/* add semaphores, ... */
/* USER CODE END RTOS_SEMAPHORES */
/* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */
/* USER CODE END RTOS_TIMERS */
/* Create the thread(s) */
/* definition and creation of defaultTask */
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
/* definition and creation of SendTemp */
osThreadDef(SendTemp, Tempsend, osPriorityNormal, 0, 128);
SendTempHandle = osThreadCreate(osThread(SendTemp), NULL);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
/* USER CODE END RTOS_THREADS */
/* Create the queue(s) */
/* definition and creation of myQueue01 */
osMessageQDef(myQueue01, 16, uint8_t);
myQueue01Handle = osMessageCreate(osMessageQ(myQueue01), NULL);
/* USER CODE BEGIN RTOS_QUEUES */
/* add queues, ... */
/* USER CODE END RTOS_QUEUES */
}
/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
osDelay(100);
HAL_UART_Receive(&huart1,rxbuffer,200,1000);
OLED_ShowStr(0,0,rxbuffer,2);
memset(rxbuffer,0,sizeof(uint8_t)*200);
// OLED_CLS();
}
/* USER CODE END StartDefaultTask */
}
/* Tempsend function */
void Tempsend(void const * argument)
上一篇:用stm32Cube生成103c8t6的usb驅動
下一篇:STM32F103內部FLASH及地址表
推薦閱讀
史海拾趣
面對電子行業的多元化需求,GREEGOO公司選擇了智能家居作為其主要發展方向。公司深入調研市場需求,精準定位目標客戶群體,推出了一系列具有創新性和實用性的智能家居產品。通過不斷優化產品設計和用戶體驗,GREEGOO在智能家居領域逐漸建立了良好的口碑和品牌形象。隨著智能家居市場的不斷擴大,GREEGOO的銷售額和市場份額也實現了穩步增長。
自成立以來,科山芯創始終堅持技術創新。他們投入大量資源用于研發,不斷推出新產品。其中,COS8820射頻收發芯片、COS6212線驅動器功放芯片等產品,憑借其優異的性能和穩定性,在市場上獲得了廣泛認可。這些產品的成功,不僅證明了科山芯創的技術實力,也為其在電子行業中樹立了良好的口碑。
隨著產品的不斷推出和市場的認可,科山芯創開始積極拓展市場。他們與國內外多家知名企業建立了合作關系,產品廣泛應用于通訊網絡、物聯網、工業自動控制等多個領域。同時,科山芯創還積極參加各種行業展會和交流活動,與業界同行進行深入交流,共同推動電子行業的發展。
自成立以來,科山芯創始終堅持技術創新。他們投入大量資源用于研發,不斷推出新產品。其中,COS8820射頻收發芯片、COS6212線驅動器功放芯片等產品,憑借其優異的性能和穩定性,在市場上獲得了廣泛認可。這些產品的成功,不僅證明了科山芯創的技術實力,也為其在電子行業中樹立了良好的口碑。
隨著市場競爭的加劇,Chyao Shiunn意識到品質管理的重要性。公司開始加強產品質量的控制,從原材料的采購到生產流程的每一個環節都嚴格把關。同時,公司還加大了品牌宣傳力度,通過參加行業展會、舉辦技術研討會等方式提升品牌知名度。這些舉措不僅提高了公司的市場份額,也增強了客戶對公司的信任。
隨著Avago的進一步發展和演變,CyOptics作為其子品牌也迎來了新的發展機遇。如今,Avago已經演變為Broadcom公司,而CyOptics則繼續以其在光學領域的專業技術和豐富經驗為Broadcom的產品線增添光彩。展望未來,CyOptics將繼續秉承其技術領先和創新驅動的理念,為全球客戶提供更加優質的光學產品和服務。
電路“集成”使軍事力量倍增 自從60年代第一塊集成電路問世,30多年來,微電子技術得到了飛速發展,首先在軍事上得到廣泛的應用,促成了精確制導武器、C4I系統等一系列高技術武器裝備的發展,使作戰效能 ...… 查看全部問答∨ |
|
先來敘述一些概念。 LCM和LCD的區別 LCM【Liquid Crystal Module】液晶顯示模塊,通常包括顯示驅動電路,接口電路等等。往往做成一個整體模塊的形式,包括LCD液晶屏,屏的框架,線路板,驅動IC,控制IC等一系列,一般還有背光電路,其中IC的 ...… 查看全部問答∨ |
|
大家好,我們做的報警器的手持機子上只用到了:STC12C5A08S2,WD3601T,HT9200A,等。但是沒有用到編碼器。我在想是STC12C5A08S2本身具有編碼能力還是HT9200A可以編碼。我下載了HT9200A的DATASHEET,看了下,沒有看懂,請大家幫個忙!謝謝!… 查看全部問答∨ |
|
我將GPS用USB線插入電腦并且安裝了 activesync.并且USB口COM3口都是可用的。在VS2005中建了一個wince 5.0的設備應用程序的項目。我想做一個簡單的程序安裝到GPS中試驗一下,但是老連接不到設備。請各位大大幫忙教教該怎么做或提供些可學習的資料好 ...… 查看全部問答∨ |
|
89S51的p3.0腳和p3.1腳是用來進行RS232通訊的,請問在這兩個腳能不能直接跟計算機連接,如果不能,是不是要在和計算機連接之間連上一個232接口芯片呢 89S51的p3.0腳和p3.1腳是用來進行RS232通訊的,請問在這兩個腳能不能直接跟計算機連接,如果不能,是不是要在和計算機連接之間連上一個232接口芯片呢?目前流行的232接口芯片有哪些?如果是485通訊又該用什么芯片?和計算機的連接通訊腳是否可以隨 ...… 查看全部問答∨ |