小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇)
小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇)
文章目录
- 前言
- 一、Keil5+FLYMCU(软件烧录)
- 二、DHT11温湿度模块驱动代码
- 三、BH1750光照强度驱动代码
- 四、代码资料包获取方式
- 总结
前言
小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇)
【DIY】stm32f103c8t6+mqtt阿里云+小程序+n多外设
使用工具:
硬件:
PCB设计: 立创EDA+嘉立创
硬件外设:stm32f103c8t6最小系统+dht11+bh1750+mq2+mq7+gps+0.96oled+蓝牙hc06+esp8266-01s
设计出来的总体是这样
软件:
代码编译:KEIL5、
代码烧录:FLYMCU
提示:以下是本篇文章正文内容,下面案例可供参考
一、Keil5+FLYMCU(软件烧录)
首先在写入代码之前,把KEIL5配置好
其次在烧录代码之前,把FLYMCU配置好
二、DHT11温湿度模块驱动代码
DHT11温湿度模块驱动代码
#include "dht11.h"
#include "delay.h"
void DHT11_Rst(void)
{ DHT11_IO_OUT(); //SET OUTPUTDHT11_DQ_OUT=0; //ÀµÍDQDelay_Ms(20); //ÀµÍÖÁÉÙ18msDHT11_DQ_OUT=1; //DQ=1Delay_Us(30); //Ö÷»úÀ¸ß20~40us
}
u8 DHT11_Check(void)
{ u8 retry=0;DHT11_IO_IN();//SET INPUTwhile (DHT11_DQ_IN&&retry<100)//DHT11»áÀµÍ40~80us{retry++;Delay_Us(1);}; if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100)//DHT11ÀµÍºó»áÔÙ´ÎÀ¸ß40~80us{retry++;Delay_Us(1);};if(retry>=100)return 1; return 0;
}
//´ÓDHT11¶ÁÈ¡Ò»¸öλ
//·µ»ØÖµ£º1/0
u8 DHT11_Read_Bit(void)
{u8 retry=0;while(DHT11_DQ_IN&&retry<100)//µÈ´ý±äΪµÍµçƽ{retry++;Delay_Us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100)//µÈ´ý±ä¸ßµçƽ{retry++;Delay_Us(1);}Delay_Us(40);//µÈ´ý40usif(DHT11_DQ_IN)return 1;else return 0;
}u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{ u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++)//¶ÁÈ¡40λÊý¾Ý{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}else return 1;return 0;
}
//³õʼ»¯DHT11µÄIO¿Ú DQ ͬʱ¼ì²âDHT11µÄ´æÔÚ
//·µ»Ø1:²»´æÔÚ
//·µ»Ø0:´æÔÚ
u8 DHT11_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //ʹÄÜPG¶Ë¿ÚʱÖÓGPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PB11¶Ë¿ÚÅäÖÃGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); //³õʼ»¯IO¿ÚGPIO_SetBits(GPIOB,GPIO_Pin_11); //PG11 Êä³ö¸ßDHT11_Rst(); //¸´Î»DHT11return DHT11_Check();//µÈ´ýDHT11µÄ»ØÓ¦
}
三、BH1750光照强度驱动代码
BH1750光照强度驱动代码
#include "BH1750.h"
#include "delay.h"
//#include "oled.h"
//#include "oled_iic.h"
uchar BUF[8]; //½ÓÊÕÊý¾Ý»º´æÇø
int mcy; //½øλ±êÖ¾/***¿ªÊ¼ÐźÅ***/
void BH1750_Start()
{SDA=1; //À¸ßÊý¾ÝÏßSCL=1; //À¸ßʱÖÓÏßDelay_Us(5); //ÑÓʱGPIO_ResetBits(bh1750_PORT, sda); //²úÉúϽµÑØDelay_Us(5); //ÑÓʱGPIO_ResetBits(bh1750_PORT, scl); //ÀµÍʱÖÓÏß
}void BH1750_Stop()
{SDA=0; //ÀµÍÊý¾ÝÏßSCL=1; //À¸ßʱÖÓÏßDelay_Us(5); //ÑÓʱGPIO_SetBits(bh1750_PORT, sda); //²úÉúÉÏÉýÑØDelay_Us(5); //ÑÓʱ
}void BH1750_SendACK(int ack)
{GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Pin = sda;GPIO_Init(bh1750_PORT, &GPIO_InitStruct); if(ack == 1) //дӦ´ðÐźÅSDA=1; else if(ack == 0)SDA=0; elsereturn; SCL=1; //À¸ßʱÖÓÏßDelay_Us(5); //ÑÓʱSCL=0; //ÀµÍʱÖÓÏßDelay_Us(5); //ÑÓʱ
}
void BH1750_SendByte(uchar dat)
{uchar i;for (i=0; i<8; i++) //8λ¼ÆÊýÆ÷{if( 0X80 & dat )GPIO_SetBits(bh1750_PORT,sda);elseGPIO_ResetBits(bh1750_PORT,sda);dat <<= 1;SCL=1; //À¸ßʱÖÓÏßDelay_Us(5); //ÑÓʱSCL=0; //ÀµÍʱÖÓÏßDelay_Us(5); //ÑÓʱ}BH1750_RecvACK();
}
uchar BH1750_RecvByte()
{uchar i;uchar dat = 0;uchar bit;GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; /*ÕâÀïÒ»¶¨ÒªÉè³ÉÊäÈëÉÏÀ£¬·ñÔò²»ÄܶÁ³öÊý¾Ý*/GPIO_InitStruct.GPIO_Pin = sda;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(bh1750_PORT,&GPIO_InitStruct );GPIO_SetBits(bh1750_PORT,sda); //ʹÄÜÄÚ²¿ÉÏÀ,×¼±¸¶ÁÈ¡Êý¾Ý,for (i=0; i<8; i++) //8λ¼ÆÊýÆ÷{dat <<= 1;SCL=1; //À¸ßʱÖÓÏßDelay_Us(5); //ÑÓʱif( SET == GPIO_ReadInputDataBit(bh1750_PORT,sda))bit = 0X01;elsebit = 0x00; dat |= bit; //¶ÁÊý¾ÝSCL=0; //ÀµÍʱÖÓÏßDelay_Us(5); //ÑÓʱ} GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(bh1750_PORT, &GPIO_InitStruct );return dat;
}void Single_Write_BH1750(uchar REG_Address)
{BH1750_Start(); //ÆðʼÐźÅBH1750_SendByte(SlaveAddress); //·¢ËÍÉ豸µØÖ·+дÐźÅBH1750_SendByte(REG_Address); //ÄÚ²¿¼Ä´æÆ÷µØÖ·£¬Çë²Î¿¼ÖÐÎÄpdf22Ò³
// BH1750_SendByte(REG_data); //ÄÚ²¿¼Ä´æÆ÷Êý¾Ý£¬Çë²Î¿¼ÖÐÎÄpdf22Ò³BH1750_Stop(); //·¢ËÍÍ£Ö¹ÐźÅ
}//³õʼ»¯BH1750£¬¸ù¾ÝÐèÒªÇë²Î¿¼pdf½øÐÐÐÞ¸Ä****
void Init_BH1750()
{GPIO_InitTypeDef GPIO_InitStruct;/*¿ªÆôGPIOBµÄÍâÉèʱÖÓ*/ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Pin = sda | scl ;GPIO_Init(bh1750_PORT,&GPIO_InitStruct); Single_Write_BH1750(0x01); Delay_Ms(180); //ÑÓʱ180ms
}//Á¬Ðø¶Á³öBH1750ÄÚ²¿Êý¾Ý
void mread(void)
{ uchar i; BH1750_Start(); //ÆðʼÐźÅBH1750_SendByte(SlaveAddress+1); //·¢ËÍÉ豸µØÖ·+¶ÁÐźÅfor (i=0; i<3; i++) //Á¬Ðø¶ÁÈ¡6¸öµØÖ·Êý¾Ý£¬´æ´¢ÖÐBUF{BUF[i] = BH1750_RecvByte(); //BUF[0]´æ´¢0x32µØÖ·ÖеÄÊý¾Ýif (i == 3){BH1750_SendACK(1); //×îºóÒ»¸öÊý¾ÝÐèÒª»ØNOACK}else{ BH1750_SendACK(0); //»ØÓ¦ACK}}BH1750_Stop(); //Í£Ö¹ÐźÅDelay_Ms(5);
}
float read_BH1750(void)
{int dis_data; //±äÁ¿float temp1;float temp2;Single_Write_BH1750(0x01); // power onSingle_Write_BH1750(0x10); // H- resolution modeDelay_Ms(180); //ÑÓʱ180msmread(); //Á¬Ðø¶Á³öÊý¾Ý£¬´æ´¢ÔÚBUFÖÐdis_data=BUF[0];dis_data=(dis_data<<8)+BUF[1]; //ºÏ³ÉÊý¾Ýtemp1=dis_data/1.2;temp2=10*dis_data/1.2; temp2=(int)temp2%10;
// OLED_ShowStr(87,2,".",12);
// OLED_ShowNum(94,2,temp2,1,12);return temp1;
}
四、代码资料包获取方式
其他获取方式
1.公众号:万物汇联,关键词回复:阿里云代码。
2.CSDN:点击这里:代码资源
3.关注B站:Kisorge
UID:29599216
总结
本文仅仅简单介绍了软件驱动方面的配置,评论区欢迎讨论。
小白从零开始:小程序阿里云平台控制stm32温湿度光照强度(软件篇)相关推荐
- 小白从零开始:小程序阿里云平台控制stm32(小程序篇)
小白从零开始:小程序阿里云平台控制stm32(小程序篇) 文章目录 前言 一.准备:小程序注册+开发者工具 二.小程序开发者工具配置 三.小程序 js代码更改位置 四.小程序 wxml代码更改位置 五 ...
- 微信小程序 阿里云服务器 非物联网平台自建MQTT代理服务器控制树莓派LED
微信小程序 阿里云服务器 非物联网平台自建MQTT代理服务器控制树莓派LED 本人大三,临近毕业季,日后希望从事物联网和嵌入式相关工作,所以自己构想了一个项目来练手,之前做大创的时候学了一点微信小程序 ...
- 微信小程序+阿里云+stm32f407的一个项目
** 微信小程序+阿里云+stm32f407的一个项目## 小程序参考了大神半颗心脏的博客和资料, 小程序多个页面推送数据 因为自己做小程序是类似商城的一个demo, 其中数据需要与单片机进行交互,而 ...
- 最详细的【微信小程序+阿里云Web服务】开发部署指引(八):开发小程序卡片类型呈现功能
文章目录 前言 一.功能说明 二.代码实现 1.创建主界面Page 2.WXML 2.JS 3.WXSS 4.合法域名校验 5.图片缓存刷新问题的解决 小结 专题文章链接 前言 本篇文章,将对照专题案 ...
- 最详细的【微信小程序+阿里云Web服务】开发部署指引(十一):开发小程序设置功能
文章目录 前言 一.功能说明 二.设置界面代码实现 1.创建界面Page 2.WXML 3.JS 4.WXSS 三.参数控制逻辑代码实现 1.自动跳转卡片 2.自动播放声音 专题文章链接 前言 案例的 ...
- 最详细的【微信小程序+阿里云Web服务】开发部署指引(一):准备开始
文章目录 前言 案例说明 专题文章链接 前言 作为一个程序开发的老鸟,有时候想使用微信小程序,开发实现一些实用的小功能.由于小程序往往需要有后台数据的支持,所以一般还需要搭建一个Server服务器,来 ...
- 最详细的【微信小程序+阿里云Web服务】开发部署指引(十二):开发小程序用户反馈功能
文章目录 前言 一.功能说明 二.代码实现 1.创建界面Page 2.WXML 3.JS 4.WXSS 专题文章链接 前言 案例的运行效果,可以扫码观看: 本篇文章,我们将实现应用的用户反馈功能. 一 ...
- 最详细的【微信小程序+阿里云Web服务】开发部署指引(四):搭建服务端数据库
文章目录 前言 一.连接主机数据库 二.创建数据表结构 三.准备测试数据 专题文章链接 前言 做完了前面的注册申请工作,今天我们开始进行程序的开发. 这篇文章,我们要完成的是服务端数据库表的创建. 一 ...
- 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯
本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...
最新文章
- Transformer LambdaNetworks
- 网络推广——网络推广如何安排网站关键词的布局策略?
- html grid插件,miniGrid:轻量级流布局JS插件
- 1Nginx+fastdfs分布式文件存储
- 嗅探(被动嗅探)与ARP欺骗(主动嗅探)详解
- python学习-综合练习六(列表翻转、变量交换、复制列表、元素求和(lambda和递归)、字典排序、字典pop)
- Pytorch入门-2
- 年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据
- python 数据挖掘与分析实战
- 三阶龙格库塔matlab,三阶、四阶龙格库塔函数matlab代码.doc
- Arango db 快速入门
- 奥西750服务器系统,奥西TDS750驱动
- 独家访谈N位品牌操盘手:深度揭秘品牌自播方法论
- 周一清晨的管理课-全球第一畅销领导力培训手册
- 【IoT】战略:BEM 战略解码 - 好的战略需要好的执行
- 家到学校路线图怎么画_PPT绘制家到学校路线图教程
- 微信二次分享解决图标文案失效方案
- 酷我音乐盒去广告(续)
- 把服务器sql数据库导出excel文件,将mysql数据库数据以Excel文件的形式导出
- 洛谷P3336 [ZJOI2013]话旧 题解