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

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

前言

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

一、材料准备

STM32F103开发板一块(当然也可以使用最小系统,只要接线正确就可以)stm32+ESP8266 接入机智云--点亮LED灯_第1张图片

esp8266开发板一块
(4M32mbit)
stm32+ESP8266 接入机智云--点亮LED灯_第2张图片

杜邦线若干

数据线一根

硬件接线

stm32 esp8266
3.3v VCC
GND GND
TXD RXD
RXD TXD

机智云平台

stm32+ESP8266 接入机智云--点亮LED灯_第3张图片
开发者中心
stm32+ESP8266 接入机智云--点亮LED灯_第4张图片
#####################################################################################
注册账号(自己完成)
######################################################################################
在这里插入图片描述

给esp8266烧录固件

(参考http://docs.gizwits.com/zh-cn/deviceDev/ESP8266%E4%B8%B2%E5%8F%A3%E7%83%A7%E5%86%99%E8%AF%B4%E6%98%8E.html#1-%E4%B8%8B%E8%BD%BDESP8266%E5%AF%B9%E5%BA%94%E7%9A%84%E5%9B%BA%E4%BB%B6)

机智云平台产品注册

创建新的产品

stm32+ESP8266 接入机智云--点亮LED灯_第5张图片

添加数据点

stm32+ESP8266 接入机智云--点亮LED灯_第6张图片
点击添加 之后应用stm32+ESP8266 接入机智云--点亮LED灯_第7张图片

stm32+ESP8266 接入机智云--点亮LED灯_第8张图片
可以进行虚拟调试
stm32+ESP8266 接入机智云--点亮LED灯_第9张图片
下载机智云APP 扫描二维码进行调试
stm32+ESP8266 接入机智云--点亮LED灯_第10张图片
stm32+ESP8266 接入机智云--点亮LED灯_第11张图片
之后进入MCU开发 选择单片机型号
这里用的是其他平台
》》》》》》》》》》product Secret在产品信息————基本信息下查看》》》》》》》》》
然后生成代码包,并下载。。。。。。。

stm32+ESP8266 接入机智云--点亮LED灯_第12张图片

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

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

stm32+ESP8266 接入机智云--点亮LED灯_第13张图片
机智云官方使用的是hal库,我没有接触过,我买的开发板是普中的,因此需要代码移植。

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

stm32+ESP8266 接入机智云--点亮LED灯_第17张图片

下面进行代码移植
1.修改usart3
(串口3是用来进行单片机与esp8266通信的,串口1是打印提示信息的,所以说串口1不用修改,当然也可以选择其他串口)
在 usart3.c 文件中添加串口 3 的初始化和中断服务函数,将中断接收的数据写入到 gizPutData()函数
void USART3_Init(u32 bound),,,这是串口初始化函数,相信大家都懂,这里就不贴出来了
stm32+ESP8266 接入机智云--点亮LED灯_第18张图片
2.修改 time.c 文件
在定时器 4中断服务函数中添加 gizTimerMs()函数,并且添加 gizwits_product.h 头文件,在这里会有一个警告,意思是头文件gizwits_product.h 中没有对 gizTimerMs()函数做声明,因此在gizwits_product.h 中应添加声明语句void gizTimerMs(void );
添加后警告消失
stm32+ESP8266 接入机智云--点亮LED灯_第19张图片
stm32+ESP8266 接入机智云--点亮LED灯_第20张图片
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);

stm32+ESP8266 接入机智云--点亮LED灯_第21张图片
<2>函数 int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *gizdata, uint32_t len) 中添加代码如下:
(用到了LED灯的点亮,因此需要就加入led.h,,,千万不要忘记加入位代头文件,,不然会报错的)stm32+ESP8266 接入机智云--点亮LED灯_第22张图片
<3> 函数 void mcuRestart(void) 中添加代码如下:
__set_FAULTMASK(1);
NVIC_SystemReset();
stm32+ESP8266 接入机智云--点亮LED灯_第23张图片
<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*)¤tDataPoint, 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 *)¤tDataPoint);//协议处理 
				
				
				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,可以上网的那种),输入密码,
进入到下面的界面

stm32+ESP8266 接入机智云--点亮LED灯_第24张图片
然后按下开发板上定义的按键,进入到AirLink模式,点击我已完成上述操作。。即可
本教程仅仅做个人技术交流分享,如有不对之处,请留言,本人及时更改。

你可能感兴趣的:(ESP8266)