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-08 18:21

STM32开发 -- Systick定时器
一、Systick定时器介绍 参看:STM32菜鸟成长记录—系统滴答定时器(systick)应用 参看:SysTick定时器和delay延迟函数 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号: 15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 **优点: **节省
[单片机]
<font color='red'>STM32</font>开发 -- Systick定时器
回炉重造STM32 CUBEMX之串口通讯问题四
串口通讯+PWM波:STM32F103C8T6通过USART1输入相应的指令控制的TIM3四个通道生成四个占空比不同的频率为50HzPWM波来控制云台。 之前用FT232直连单片机,一切正常返回的指令无乱码正常。 接上数传图传出现问题: 1、连续给出高电平时间持续1.5ms的指令,电机本该静止却会往一个方向慢慢漂移。怀疑每次在发出指令单片机相应指令的过程中会导致PWM波占空比变化。 2、接上数传后返回的指令中含有很多乱码。设备有时会莫名重启或者关闭。怀疑是发送的指令出现了偏差触发了开关机的指令。 3、设备返回的图像黑屏 解决方法: 1、对于重复发出的指令,设置相应的重复处理程序。若指令相同或者相同指令持续3次则跳
[单片机]
STM32使用内部晶振还是外部晶振
在项目开发过程中,经常会面临“用内部晶振还是外部晶振”的问题。如何选择?关键还是看应用! 如果产品附加值比较高,并且产品对温度,电磁环境等可靠性要求严格的时候,需要考虑使用外部晶振。 毕竟,内部晶振受环境影响比较大(内部晶振的叫法不是很严谨,准确的说内部是RC振荡器,鉴于阻容器件尤其电容大小受温度影响较大,因此温度、电压等对其影响较大,如下图技术手册中所指出的)。 话说回来,在MCU上如果不使用外部晶振,那么引脚OSC_IN和OSC_OUT如何接才比较好呢? ▲技术手册 我们以STM32为例说明,如果使用内部RC振荡器而不使用外部晶振,请按照以下方法处理: (1)对于100脚或144脚的产品,OSC_IN应接地,
[单片机]
<font color='red'>STM32</font>使用内部晶振还是外部晶振
STM32定时器学习笔记
TIMx是由16位计数器,预分频器,自动装载寄存器构成 计数器:16位(0-65535) 预分频器16位(寄存器控制的计数器) 预分频为1是每一个时间脉冲计数器加1,预分频为2每两个时间脉冲计1. 自动装载寄存器:每次溢出事件的自动装载设置的计数值。 深度剖析:、 计数器的范围(0-65535) 预分频器的范围(0-65535) 由于STM32F103最大支持的频率是72Mhz,所以设置的时候应该注意二者之间的,一般自动装载计数器设置较大若设置10000-1,将预分频书设置为72-1,可以实现1s的计时。可以理解为每72个时钟脉冲计数器加1,计数器加到10000-1的时候定时器产生一次溢出事件。
[单片机]
正点原子STM32学习笔记——MPU6050介绍
一、MPU6050简介 1.什么是MPU6050? MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC接口,可以向应用端输出完整的9轴姿态融合演算数据。 有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度 。 2.MUP6050特点。 MPU6050 的特点包括: ① 以数字形式输出
[单片机]
正点原子<font color='red'>STM32</font>学习笔记——MPU6050介绍
stm32引脚速度GPIO_Speed的区别
一、 GPIO模式配置 1、输入/输出模式(参考stm32手册) 2、GPIO输出模式下,几种速度的区别: (1). GPIO 引脚速度: GPIO_Speed_2MHz (10MHz, 50MHz) ; 又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。) 可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。 (如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。失真因素?) 如果信号频率为10MHz,而你配置了2MH
[单片机]
ARM7微型嵌入式Web服务器的设计与实现
   1 引言   随着计算机、网络通信和Internet技术的飞速发展和不断进步,嵌入式系统在家庭和工业应用广泛。如何将嵌入式系统和工业控制系统接人Internet,综合利用嵌入式系统资源,实现嵌入式系统的远程管理和控制,已成为关注的研究课题,而实现嵌入式系统的网络化则成为嵌入式系统的发展趋势。   以太网以其成本低、速度快、应用普遍、有广泛的硬件和软件支持等优点为实现管理控制网络一体化提供可能,在现场设备内置WEB服务器,使现场设备具有网页发布功能,将Internet技术直接引入现场设备。   本设计是基于ARM7的微型嵌入式Web服务器。目前市场上大部分以太网控制器的封装均超过80引脚,而ENC28J60是业界最小
[工业控制]
ARM7微型嵌入式Web服务器的设计与实现
STM32之PVD电压检测
如果VDD或者VDDA电压高于或低于PVD设定阈值都产生中断,表现为每中断一次,LED1就亮变灭或者灭变亮。 /******************************************************************************** * @file PWR/PVD/main.c * @author MCD Application Team * @version V3.4.0 * @date 10/15/2010 * @brief Main program body. *********************************************
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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