stm32+ESP8266 接入机智云--点亮LED灯

stm32+ESP8266 接入机智云–点亮LED灯

前言

最近参加电子设计大赛,在做智能车的时候用到了蓝牙,摆弄了好长时间;校赛的时候又需要远程控制,又使用了蓝牙。一次偶然的机会,结识了一个网友,在他的指导下实现了,esp8266接入机智云。一开始是想用阿里云做,但是由于种种原因换成了机智云,对于机智云最难的应该是代码移植了,我搜索了好多文件,问了好多人,最终调试成功,在这里写一下教程,希望小白不要走弯路。
为了保证此教程的完整性,从头开始。

一、材料准备

STM32F103开发板一块(当然也可以使用最小系统,只要接线正确就可以)在这里插入图片描述

esp8266开发板一块
(4M32mbit)
esp8266开发板一块

杜邦线若干

数据线一根

硬件接线

stm32esp8266
3.3vVCC
GNDGND
TXDRXD
RXDTXD

机智云平台

在这里插入图片描述
开发者中心
在这里插入图片描述
#####################################################################################
注册账号(自己完成)
######################################################################################
在这里插入图片描述

给esp8266烧录固件

参考这里

机智云平台产品注册

创建新的产品

在这里插入图片描述

添加数据点


点击添加 之后应用在这里插入图片描述

在这里插入图片描述
可以进行虚拟调试
在这里插入图片描述
下载机智云APP 扫描二维码进行调试
在这里插入图片描述
在这里插入图片描述
之后进入MCU开发 选择单片机型号
这里用的是其他平台
》》》》》》》》》》product Secret在产品信息————基本信息下查看》》》》》》》》》
然后生成代码包,并下载。。。。。。。

在这里插入图片描述

代码移植(hal库移植到标准库,我使用的是普中的开发板,方法仅供参考)

官方自动自动生成源程序结构如图

在这里插入图片描述
机智云官方使用的是hal库,我没有接触过,我买的开发板是普中的,因此需要代码移植。

首先将这两个文件夹(Gizwits 和 Utils)发复制到自己熟悉的标准库工程文件夹中(工程是之前自己仿照普中的写的)
需要用到串口3和串口1,以及定时器4
控制LED当然需要led.h
按键控制进入Airlink模式或者复位模式
在这里插入图片描述
在此处将刚才复制的文件夹包含到工程中
在这里插入图片描述
在这里插入图片描述
操作完成后
在这里插入图片描述
别忘记将文件路径添加进去,不然会报错–找不到文件

在这里插入图片描述

下面进行代码移植
1.修改usart3
(串口3是用来进行单片机与esp8266通信的,串口1是打印提示信息的,所以说串口1不用修改,当然也可以选择其他串口)
在 usart3.c 文件中添加串口 3 的初始化和中断服务函数,将中断接收的数据写入到 gizPutData()函数
void USART3_Init(u32 bound),,,这是串口初始化函数,相信大家都懂,这里就不贴出来了
在这里插入图片描述
2.修改 time.c 文件
在定时器 4中断服务函数中添加 gizTimerMs()函数,并且添加 gizwits_product.h 头文件,在这里会有一个警告,意思是头文件gizwits_product.h 中没有对 gizTimerMs()函数做声明,因此在gizwits_product.h 中应添加声明语句void gizTimerMs(void );
添加后警告消失
在这里插入图片描述
在这里插入图片描述
3.修改 gizwits_product.c 文件
printf定义在 usart.c 文件(不是普中的,我自己照着写的)已经有添加了,我们不需要再添加,需要添加代码如下:

因为我在main函数中定义了void userHandle(void)函数,一次需要将 gizwits_product.c 中的相应函数删除,不然会出现重定义

<1> 函数 int32_t uartWrite(uint8_t *buf, uint32_t len) 中添加代码如下:(因为用到了串口3,因此需要加入相应的头文件)

  USART_SendData(USART3,buf[i]);      
  while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); 


  USART_SendData(USART3,0x55);    
   while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);

在这里插入图片描述
<2>函数 int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len) 中添加代码如下:
(用到了LED灯的点亮,因此需要就加入led.h,,,千万不要忘记加入位代头文件,,不然会报错的)在这里插入图片描述
<3> 函数 void mcuRestart(void) 中添加代码如下:
__set_FAULTMASK(1);
NVIC_SystemReset();
在这里插入图片描述
<4>修改main.c内容
这里我就直接贴代码了 ,有参考过正点原子的
当然你的头文件和我的可能不一样,这就需要你自己修改了(ps:无论你参考什么教程,这个是无法避免的)
main函数中定义的按键和你的开发板不一定匹配,请注意修改自己的管脚定义,避免出错
还有就是那个led8使用来提示系统正常运行的,不用的话可以删掉,那个延时不要加太多,不然影响传输速度

#include "led.h"
#include "SysTick.h"
#include "key.h"  
#include "usart.h" 
#include "time.h"
#include "usart3.h" 
#include "gizwits_product.h"  
 
//用户区当前设备状态结构体
dataPoint_t currentDataPoint; 
 
//协议初始化 
    void Gizwits_Init(void) 
	{   
		TIM3_Init(9,7199);//1MS 系统定时
		USART3_Init(9600);//WIFI 初始化 波特率必须为 9600 
		memset((uint8_t*)&currentDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
		gizwitsInit(); 
	} //数据采集 
	
	void userHandle(void) { 
		//判断当前 LED1 开关量  
		if(led1==0)  
			currentDataPoint.valuepower = 1;  
	    else    
		    currentDataPoint.valuepower = 0; 
	} 
	
	//主函数  
	int main(void)  
		{      
			int key; 
            SysTick_Init(72); //延时函数初始化   
			NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);       //设置 NVIC 中断分组 2:2 位抢占优先级,2 位响应优先级      
			USART1_Init(115200);    //串口初始化为 115200   
			LED_Init();             //LED 端口初始化 
			KEY_Init();             //按键初始化     
			Gizwits_Init();         //协议初始化 
			printf("-------初始化完成----------\r\n"); 
			printf("KEY_UP:AirLink 连接模式\t KEY_DOWN:复位\r\n\r\n");  
			while(1)  
			{       
				userHandle();//用户采集
				
				
				gizwitsHandle((dataPoint_t *)&currentDataPoint);//协议处理 
				
				
				key = KEY_Scan(0);  
				
				if(key==KEY_UP)//KEY_UP 按键  
				{    
					printf("WIFI 进入 AirLink 连接模式\r\n");    
					gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link 模式接入  
					
					}     
				if(key==KEY_DOWN)//KEY_DOWN 按键  
				{        
					printf("WIFI 复位,请重新配置连接\r\n");  
					gizwitsSetMode(WIFI_RESET_MODE);//WIFI 复位
					
					}    
				
				led8=!led8;
				delay_ms(100);	
		} 
		} 

代码移植到此结束,之后就可以配置esp8266入网了
软件商店下载机智云app,登录后
点击右上角的+,选择一键配置,在这里你的手机需要连接可以上网的WiFi(你家里的WiFi,可以上网的那种),输入密码,
进入到下面的界面

在这里插入图片描述
然后按下开发板上定义的按键,进入到AirLink模式,点击我已完成上述操作。。即可
本教程仅仅做个人技术交流分享,如有不对之处,请留言,本人及时更改。


欢迎大家加入嵌入式linux技术交流群**(QQ:100479172)**,也欢迎大家一起讨论C语言、C++、单片机、数据结构、Qt、Linux、IMX6ULL等技术。源码在Q群文件中。

  • 24
    点赞
  • 270
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: STM32ESP8266是目前比较常用的物联网设备,可以实现对传感器的数据采集、处理和传输。如果要将其接入到OneNET平台上,需要以下步骤: 1. 准备硬件:需要一块STM32开发板和一块ESP8266模块,以及一个温湿度传感器。 2. 搭建开发环境:使用Keil等集成开发环境进行代码编写和调试。开发环境需要支持STM32的C语言编程。 3. 编写程序:首先要实现STM32与温湿度传感器之间的通信,采集数据并监测数据的变化。然后再使用STM32ESP8266之间的串口通信,将数据发送到OneNET平台。 4. 配置OneNET平台:打开OneNET官网,注册帐号并创建设备模板,将上传的数据添加到设备模板中。配置好硬件设备所属的产品和数据流,获取设备的Key和Topic。 5. 实现数据上传:使用AT指令控制ESP8266与OneNET服务器进行通信,将采集的数据上传到设备模板中。 总之,需要通过串口通信实现stm32esp8266之间的数据传输和控制,然后通过AT指令控制esp8266连接OneNET平台并上传数据。需要充分理解OneNET平台的产品和设备模板、数据流等概念,并具备一定的开发经验和编程能力。 ### 回答2: 在将STM32ESP8266联合使用来接入onenet平台中,需要遵循以下步骤。 第一步,选择合适的传感器来测量温湿度。通常可选择DHT11或DHT22等温湿度传感器。 第二步,在STM32上连接传感器,通过ADC模块读取传感器测得的温湿度数据,并将数据存储在内存中。 第三步,通过STM32ESP8266进行串口通信,将读取到的温湿度数据传输给ESP8266。 第四步,通过AT指令将数据通过ESP8266连接到onenet平台。需要注意的是,需要在onenet平台中创建数据流,并获取到数据流ID、设备ID、以及密钥等信息。 第五步,将数据通过HTTP POST方式发送到onenet平台,实现数据上传。 最后,进行数据接入验证。可通过在onenet平台上查看数据流图表来确认数据是否上传成功。 总而言之,将STM32ESP8266联合使用来接入onenet温湿度,需要通过温湿度传感器获取数据,通过STM32ESP8266进行串口通信,并借助AT指令将数据上传到onenet平台。务必进行数据接入验证,以确保数据上传成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值