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及地址表

推荐阅读最新更新时间:2024-11-16 21:47

STM32单片机设置PWM输出完整教程
STM32单片机 PWM 环境: 主机:XP 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 使用内部8M晶振,倍频到64M供给TIM3定时器,PA6(通道1)上产生640K,50%方波 源代码: 初始化时钟: //初始化RCC时钟 voidinit_rcc(void) { //将外设RCC寄存器重设为缺省值 RCC_DeInit(); //内部晶振使能 RCC_HSICmd(ENABLE); //等待工作稳定 while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET); //LSI的启动,提供给看门狗时钟 RCC_LSICmd(ENABLE);//打开LSI w
[单片机]
STM32的FLASH模拟EEPROM
1. Flash.h /* ******************************************************************* ** ** @Brief : STM32 FLASH 模拟EEPROM ** @Cpu : STM32F103ZET6 ** @Flash : 512K 字节 ** @Note : 源码来自正点原子stm32 教程 ******************************************************************* */ #ifndef __STMFLASH_H__ #define __STMFLASH_H__ #incl
[单片机]
STM32 之 HAL库、标准外设库、LL库
STM32 Embedded Software 工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。各库如下所示: 其中,STD库和HAL库两者相互独立,互不兼容。几种库的比较如下: 目前几种库对不同芯片的支持情况如下: 上图中,LL库目前有部分芯片不支持,官方计划2017年逐步完善。 STM32Snippets 它是代码示例的集合,直接基于STM32外设寄存器,可在文档和软件包中使用。由于处在最底层,因此需要开发者
[单片机]
<font color='red'>STM32</font> 之 HAL库、标准外设库、LL库
总结写的stm32的KEY控制LED
stm32的学习就是弄懂是怎么进行软件配置,先明白硬件连接,再结合起来; #include stm32f4xx.h #include led.h #define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) // 这里读取IO的状态,将stm32的IO口作为输入使用 #define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) #define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) #define LED0 PFout(9) //DSO LED
[单片机]
stm32CAN波特率计算小程序(QT源码)
软件:Qt Creator 开发环境:Window7 用qt做得一个计算波特率的小程序,在实际的应用中我们设置波特率的时候是通过以下参数来定的: CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; CAN_InitStructure.CAN_Prescaler=5; 波特率计算小程序的截图: 根据所需的的采样点、波特率以及错误率得到以上外设初始化所需的参数。 据网上资料,采样点的设置有以下规律: 75% when 波特率
[单片机]
stm32CAN波特率计算小程序(QT源码)
STM32采用普通的IO口来测量PWM的频率
STM32测量外部输入信号的频率的方法有很多: 采用内部定时器输入捕获功能。 采用普通的IO口设置外部中断+定时器的当时测量PWM信号的频率。 这两种方式比较推荐使用第一种,比较使用内部的资源可以节省CPU资源的利用, 当然当内部资源不够使用的时候,或者是说,硬件电路设计的时候没有连接相应的应引脚只能使用第二种方式了。 本次由于硬件电路设计的不足,导致需要测量PWM输入信号的引脚没有接到相应的通道上,对此使用了第二种方式: 注意:这里定时器中断的优先级要高于外部中断的优先级 思路如下: 设置PWM输入信号的引脚为外部中断的方式,并且触发方式为GPIO_MODE_IT_RISING_FALLING 上升,下降沿均
[单片机]
STM32状态监测功能包可简化机器学习过程
意法半导体发布一款免费的STM32软件功能包,让用户可以用微控制器探索套件快速创建、训练、部署工业状态监测智能边缘设备。 FP-AI-NANOEDG1软件包由意法半导体与机器学习专业开发科技公司、ST授权合作伙伴Cartesiam共同开发,包含捕获传感器数据,集成和运行Cartesiam的NanoEdge库所需的全部驱动程序、中间件、文档和代码示例。即使用户没有专业的AI技能,也能在Windows®10或Ubuntu PC机上,用Cartesiam NanoEdge™AI Studio工具快速创建并导出自定义机器学习库。功能包可简化在STM32开发板上的原型开发和确认测试过程,而且是免费使用,当客户在硬件上部署软件包时,
[单片机]
<font color='red'>STM32</font>状态监测功能包可简化机器学习过程
stm32 DMA性能资料
为了快速传送一个数据块,使用 DMA 传送程序(Mem to Mem 16bits) 测量了一下传送的时间,128个16b数据大约用了12us (72Mhz 时钟)。 换句话来说,STM32 DMA 性能为10M/s 又使用memcpy 来比对一下,用时约4us ,显然memcpy 要快很多。 btw, 在ST的手册里面未见对DMA性能的表述。 ------------------------------ ---- DMA传送数据的速度不会比CPU直接传送数据快,因为总 线频率没有变。 当CPU也在运行执行指令时, DMA传送数据的速度会比CPU直接传送数据慢, 这是因为DMA与CPU分时使用同一条总线的
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved