个人项目——基于STM32与K60的智能设备

       最近刚考完试,小学弟找我帮他完成个项目,完成接入云的一些功能,S具体有STM32搭载S1216 GPS+北斗 双模定位模块采集经纬度,占用串口2;BMP180气压监测模块采集气压,占用IIC1,;ESP8266 WIFI模块与机智云通信,占用串口3,同时也占用了IIC2,;DHT11采集温湿度,占用PG11;MPU6050采集加速度,需要再占用一个IIC,但是STM32的IIC已经全部被占用了,正好小学弟熟悉K60,所以包括MPU6050在内的剩余模块在K60上实现;空气质量(我也没见过的模块,不是MQ系列的,头上还有个对管), 编码器采集速度。K60的数据通过串口发送给串口1。

        代码如下:

        点击下载源码

        因为我不熟悉K60,所以K60的东西我就不叙述了。本来小学弟是让我在STM32上实现所有功能的,奈何我想把ESP8266放到UART4上使用,但是无论怎么调试,还是没办法像USART1、USART2、USART3那样使用(USART是同步、异步串行通信,而UART是异步串行通信),ESP8266接到UART4上就是没有办法接入机智云,所以最终放弃了,改成了用K60去搭载MPU6050、编码器、空气质量模块,然后通过K60的串口将数据发送到STM32的串口1,在用STM32把数据发送到机智云。

        把主函数的代码贴一下:

dataPoint_t currentDataPoint;
u8 USART1_TX_BUF[USART2_MAX_RECV_LEN]; 					//串口1,发送缓存区
nmea_msg gpsx; 											//GPS信息
__align(4) u8 dtbuf[50];   								//打印缓存器
u8 wifi_sta=0;
//协议初始化
void Gizwits_Init(void)
{	
	TIM3_Int_Init(9,7199);//1MS系统定时
  usart3_init(9600);//WIFI初始化
	memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
	gizwitsInit();//缓冲区初始化
}
//显示GPS定位信息 
void Gps_Msg_Show(void)
{
 	float tp;		   	 
	tp=gpsx.longitude;	   
	//sprintf((char *)dtbuf,"Longitude:%.5f %1c   ",tp/=100000,gpsx.ewhemi);	//得到经度字符串	 
	printf("Longitude:%.5f %1c\r\n",tp/=100000,gpsx.ewhemi);
	currentDataPoint.valueLongitude = tp;
	tp=gpsx.latitude;	   
	//sprintf((char *)dtbuf,"Latitude:%.5f %1c   ",tp/=100000,gpsx.nshemi);	//得到纬度字符串	 
	printf("Latitude:%.5f %1c   \r\n",tp/=100000,gpsx.nshemi); 
	currentDataPoint.valueLatitude = tp;	
}
 int main(void)
 { 
	u16 i,rxlen;
	 int x1=0,x2=0,x3=0;
	int keys;
	u8 wifi_con=0;//记录wifi连接状态 1:连接 0:断开  
	u8 key=0XFF;
	u8 upload=0; 
	u8 temperature;  	    
	u8 humidity; 	 
	delay_init();	    	 //延时函数初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级	  
	uart_init(115200);	 	//串口初始化为9600	
	USART2_Init(38400);  //初始化串口2波特率为115200
	LED_Init();         	//LED初始化	 
	KEY_Init();				//按键初始化	
	Gizwits_Init();         //协议初始化
	DHT11_Init();
	BMP_Init();
	BMP_ReadCalibrationData();
	// POINT_COLOR=RED;
	if(SkyTra_Cfg_Rate(5)!=0)	//设置定位信息更新速度为5Hz,顺便判断GPS模块是否在位. 
	{
		do
		{
			USART2_Init(9600);			//初始化串口3波特率为9600
	  	SkyTra_Cfg_Prt(3);			//重新设置模块的波特率为38400
			USART2_Init(38400);			//初始化串口3波特率为38400
      key=SkyTra_Cfg_Tp(100000);	//脉冲宽度为100ms
		}while(SkyTra_Cfg_Rate(5)!=0&&key!=0);//配置SkyTraF8-BD的更新速率为5Hz
		delay_ms(500);
	}
	while(1) 
	{		
		delay_ms(1);
		if(USART2_RX_STA&0X8000)		//接收到一次数据了
		{
			rxlen=USART2_RX_STA&0X7FFF;	//得到数据长度
			for(i=0;i

        硬件连接如下:

个人项目——基于STM32与K60的智能设备_第1张图片        使用山外k60芯片采集数据,以固定格式发送:AABAABAAA,B表示小数部分,每三位数一个参数,分别是:速度、加速度、空气质量

        APP界面如下

个人项目——基于STM32与K60的智能设备_第2张图片

        至此,教程结束,谢谢大家,也欢迎大家关注我的个人技术与资源分享公众号“linkutures”


你可能感兴趣的:(STM32)