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群文件中。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Kashine

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

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

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

打赏作者

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

抵扣说明:

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

余额充值