娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32使用TCP透傳方式與ONENET進行連接的簡單教程

發布者:andyliow1980最新更新時間:2019-06-13 來源: eefocus關鍵字:STM32  TCP  透傳方式  ONENET 手機看文章 掃描二維碼
隨時隨地手機看文章

推薦使用本文之前有一定的嵌入式基礎,請先確保了解以下名詞(提前百度):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)

[1] [2]
關鍵字:STM32  TCP  透傳方式  ONENET 引用地址:STM32使用TCP透傳方式與ONENET進行連接的簡單教程

上一篇:用stm32Cube生成103c8t6的usb驅動
下一篇:STM32F103內部FLASH及地址表

推薦閱讀最新更新時間:2025-05-02 10:24

基于STM32TCP/IP協議棧代碼之UDP分析
1. UDP介紹 UDP是一個簡單的面向數據報的運輸層協議:進程的每個輸出操作都正好產生一個 UDP數據報,并組裝成一份待發送的IP數據報。這與面向流字符的協議不同,如TCP,應用程序產生的全體數據與真正發送的單個IP數據報可能沒有什么聯系。 UDP數據報封裝成一份 IP數據報的格式如圖11 - 1所示。 RFC 768 是UDP的正式規范。 UDP不提供可靠性:它把應用程序傳給IP層的數據發送出去,但是并不保證它們能到達目的地。由于缺乏可靠性,我們似乎覺得要避免使用UDP而使用一種可靠協議如TCP。在討論完TCP后將再回到這個話題,看看什么樣的應用程序可以使用UDP。 2. UDP首部 UDP首部的各字段如圖11 -
[單片機]
基于<font color='red'>STM32</font>的<font color='red'>TCP</font>/IP協議棧代碼之UDP分析
玩轉 ESP32 + Arduino (十二) 通過MQTT協議上傳數據至OneNet云平臺
這里我們使用了一個庫: PubSubClient 中移動ONENET平臺 IP地址: 183.230.40.39 舊版MQTT端口號: 6002 一. 在ONENET平臺添加MQTT設備(舊版) 1. 添加 找到多協議接入入口 添加舊版MQTT產品 添加產品 添加產品成功 然后添加設備 2. 舊版MQTT關鍵信息 接下來我們來找到舊版MQTT關鍵的信息: 產品ID(在產品頁面) 2.設備ID(在設備界面) 3.設備鑒權信息 二. ESP32連接ONENET舊版MQTT 思路: 1.連接網絡 2.登錄ONENET 3.發布主題信息 #include Arduino.h #include
[單片機]
單片機之UIP--TCP作為服務器,主動發送數據 ACK
uip下的TCP作為服務器,主動發送數據===最近弄這個,在網上找資料好累,而且都是含糊不清的講述,沒有實例的,我實在是受不了了,好不容易弄好了一個,現在來分享下。 1.添加STC12C5A單片機的引腳定義:在reg52.h里面:sfr P4=0xC0; 2.修改對應引腳,按照電路圖修改,SPI接口采用單片機IO口模擬,只需根據實際的硬件電路設計(IO口需要上/下拉電阻),在spi.h文件中修改IO腳定義即可,需要注意的是ENC28J60采用SPI0模式,即時鐘信號上升沿接收數據,下降沿發送數據,本例中SPI通訊時序已經調通,可以直接使用,至少要接SCK,CS,SI,SO即可,INT沒有使用,可以不接,如果接上,ENC28J60驅
[單片機]
單片機之UIP--<font color='red'>TCP</font>作為服務器,主動發送數據 ACK
基于GPRS與TCP的車輛載重數據管理系統設計
隨著當今社會的發展和人們物質生活水平的提高,機動車已經進入了千家萬戶,車輛的過多給公路管理起來造成一定的困難,特別是貨車的管理。 盡管公路局已經在公路的每一段才設置了稱重收費站,但貨車司機還是采用站外卸貨,繞行,或者液壓裝置等一些高科技的手段,逃避檢測,同時貨車排隊等候檢測,也會造成公路的堵塞。 在貨車行駛的過程中稱重可以很好的解決公路交通問題,但是貨車的車載終端系統的配置不適合對大量數據進行分析和存儲,因此在貨車行駛中將檢測到的載重數據傳輸到管理系統,是解決問題的一個關鍵步驟。 1 系統的開發環境 本系統是由Visual C++6.0結合SQL Server 2000開發而成,使用ODBC操作數據庫,VC為數據庫
[嵌入式]
基于ARM的嵌入式TCP/IP協議的實現
摘要:介紹嵌入式TCP/IP協議在低速處理器中的一種簡化實現方案,并成功應用于某分布式監控系統中。 關鍵詞:TCP/IP協議 嵌入式 ARM 在網絡應用日益普遍的今天,越來越多的嵌入式設備實現Internet網絡化。TCP/IP協議是一種目前被廣泛采用的網絡協議。嵌入式Internet的技術核心是在嵌入式系統中部分或完整地實現TCP/IP協議。由于TCP/IP協議比較復雜,而目前嵌入式系統中大量應用低速處理器,受內存和速度限制,有必要將TCP/IP協議簡化。 圖1 協議處理 1 TCP/IP協議的實現 嵌入式TCP/IP協議一般實現:ARP/RARP、IP、ICMP、TCP、UDP、HTTP、SMTP、FTP、TELNE
[應用]
STM32學習筆記(九)DMA(Direct memory access controller)
直接存儲器讀取 DMA簡介 直接存儲器存取(DMA)用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。無須CPU干預,數據可以通過DMA快速地移動,這就節省了CPU的資源來做其他操作。 DMA框圖 由圖可見,DMA 一共有 DMA1 和 DMA2 兩個控制器。DMA1 有7個通道,DMA2 有5個通道。 在存儲器和存儲器之間傳輸數據時,可任選通道進行傳輸;但在外設和存儲器之間傳輸數據時,需要用到專用的通道。 各個通道的 DMA1 請求 各個通道的 DMA2 請求 DMA寄存器 中斷狀態寄存器 --- ISR(interrupt status register):存放DMA中斷的標志位; 注意:若為D
[單片機]
UCGUI在STM32平臺移植經驗(無操作系統)
ucgui 移植的前提是已經具備了LCD驅動函數,已經能夠實現點亮LCD屏幕,并實現畫點以及獲取指定點顏色值的功能。一般的顯示屏供應商會提供對應的驅動函數。主要有初始化函數void LCD_Init(),屏幕畫點函數 Void LCD_DrawPoint(u16 x,u16 y,u16 color),以及獲取指定點顏色值的U16 LCD_ReadPoint(u16 x,u16 y)函數。移植的關鍵在于把這三個函數與ucgui提供的接口函數匹配。 打開GUILCDDriver中的LCDDummy.c文件,找到int LCD_L0_Init(void)初始化函數,LCD_L0_SetPixelIndex(int x, int y,
[單片機]
UCGUI在<font color='red'>STM32</font>平臺移植經驗(無操作系統)
STM32學習之ADC
對于STM32,在使用ADC的時候需要配置幾個參數。 (1) 第一個參數是ADC_Mode,這里設置為獨立模式: ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; 在這個模式下,雙ADC不能同步,每個ADC接口獨立工作。所以如果不需要ADC同步或者只是用了一個ADC的時候,就應該設成獨立模式了。 (2) 第二個參數是ADC_ScanConvMode,這里設置為DISABLE。 ADC_InitStructure.ADC_ScanConvMode = DISABLE; 如果只是用了一個通道的話,DISABLE就可以了,如果使用了多個通道的話,則必須將其設置
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 郁南县| 托里县| 大石桥市| 天峻县| 尉犁县| 繁峙县| 洮南市| 仁布县| 永安市| 南岸区| 革吉县| 达州市| 托克逊县| 曲水县| 英吉沙县| 尼玛县| 沙洋县| 红安县| 望江县| 马鞍山市| 南昌市| 云和县| 磐安县| 岱山县| 台北市| 喀喇| 和平县| 双桥区| 恩施市| 津市市| 集贤县| 河西区| 西安市| 绵阳市| 崇左市| 德化县| 襄垣县| 鲁甸县| 资兴市| 文成县| 南投市|