基于stm32f103C8T6-小程序智能家居项目实战-自绘PCB到实现功能一条龙+30分钟解决-各种bug已修复

Posted 阿熊不凶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于stm32f103C8T6-小程序智能家居项目实战-自绘PCB到实现功能一条龙+30分钟解决-各种bug已修复相关的知识,希望对你有一定的参考价值。

项目演示:

阿熊智能家居演示

文章目录

整体结构

硬件清单

核心板

STM32F103C8T6

WIFI模块

ESP8266-01s

传感器

DHT11温湿度传感器

BH1750光照传感器

其他

LED

OLED

4脚按键开关

CP2102(USB转TTL模块)

有源蜂鸣器(低电平触发)

金属膜电阻器

面包板(或PCB)

电源和导线

采购记录

项目数量已购价格
STM32F103C8T61
ESP8266-01s1
DHT11温湿度传感器1
BH1750光照传感器1
LED1
OLED1
4脚按键开关2
CP21021
有源蜂鸣器1
金属膜电阻器1
面包板/PCB1
电源和导线1
合计

实物制作:

使用嘉立创绘制的原理图:

这个pcb布局有点随意 有几个IO口对应不对 第一次绘制没注意太多细节…仅供参考 后边会优化好

实物效果:

WiFi模块引脚弄错就接成杜邦线。。 将就看看吧哈哈

小程序:

stm32开发:

DHT11温湿度传感器

  • 主要头文件:dht11.h

  • 主要源文件:dht11.c

  • 主要函数:

    void DH11_Init(void);
    u8 DHT11_Read_Data(u8 *humiH, u8 *humiL, u8 *tempH, u8 *tempL);
    

BH1750光照传感器

  • 主要头文件:bh1750.h

  • 主要源文件:bh1750.c

  • 主要函数:

    void BH1750_Init(void);
    float Light_Int
    

蜂鸣器报警的手动控制与手动/自动控制权的协调

采用了外部中断的方法实现

  • 主要头文件:key.h

  • 主要源文件:key.c

  • 主要函数:

    void NVIC_PriorityGroupConfig(u8 NVIC_PriorityGroup_x); // 设置中断优先级分组
    void EXITX_Init(); // 外部中断初始化
    void TIMx_IRQHandler(void); // TIMx中断处理
    void KEY_Init(); // 按键
    

ESP8266-WIFI模块:

  • 主要头文件:esp8266.h

  • 主要源文件:esp8266.c

  • 主要函数:

    void ESP8266_Init(void); // 初始化
    void ESP8266_SendData(unsigned char *data, unsigned short len);//发送数据
    unsigned char *ESP8266_GetIPD(unsigned short timeOut);//获取平台返回的数据
    void USART2_IRQHandler(void); // 串口2收发中断
    

mqtt协议接入(onenet):

  • 主要头文件:onenet.h
  • 主要源文件:onenet.c
  • 主要函数:
_Bool OneNet_DevLink(void)//与onenet创建连接
void OneNet_Subscribe(const char *topics[], unsigned char topic_cnt);//订阅
void OneNet_Publish(const char *topic, const char *msg);//发布
void OneNet_RevPro(unsigned char *cmd);//平台返回数据检测

主函数:

 int main(void)
 	
	unsigned short timeCount = 0;	//发送间隔变量
	unsigned char *dataPtr = NULL;
	static u8 lineNow;
	Usart1_Init(115200);//debug串口
		DEBUG_LOG("\\r\\n");
		DEBUG_LOG("UART1初始化			[OK]");
	delay_init();	    	 //延时函数初始化	
		DEBUG_LOG("延时函数初始化			[OK]");
	OLED_Init();
	OLED_ColorTurn(0);//0正常显示,1 反色显示
  OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
	OLED_Clear();
	 	DEBUG_LOG("OLED1初始化			[OK]");
		OLED_Refresh_Line("OLED");

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
		DEBUG_LOG("中断优先初始化			[OK]");
		OLED_Refresh_Line("NVIC");
	LED_Init();		  	//初始化与LED连接的硬件接口
		DEBUG_LOG("LED初始化			[OK]");
		OLED_Refresh_Line("Led");
	KEY_Init();          	//初始化与按键连接的硬件接口
		DEBUG_LOG("按键初始化			[OK]");
		OLED_Refresh_Line("Key");
	EXTIX_Init();		//外部中断初始化
		DEBUG_LOG("外部中断初始化			[OK]");
		OLED_Refresh_Line("EXIT");
	BEEP_Init();
		DEBUG_LOG("蜂鸣器初始化			[OK]");
		OLED_Refresh_Line("Beep");
	DHT11_Init();
		DEBUG_LOG("DHT11初始化			[OK]");
		OLED_Refresh_Line("DHT11");
  BH1750_Init();
		DEBUG_LOG("BH1750初始化			[OK]");
		OLED_Refresh_Line("BH1750");
	Usart2_Init(115200);//stm32-8266通讯串口
		DEBUG_LOG("UART2初始化			[OK]");
		OLED_Refresh_Line("Uart2");
	
		DEBUG_LOG("硬件初始化			[OK]");
		
	DEBUG_LOG("初始化ESP8266 WIFI模块...");
	if(!ESP8266_INIT_OK)
		OLED_Clear();
		sprintf(oledBuf,"Waiting For");
		OLED_ShowString(16,0,(u8*)oledBuf,16);//8*16 “ABC”
		sprintf(oledBuf,"WiFi");
		OLED_ShowString(48,18,(u8*)oledBuf,16);//8*16 “ABC”
		sprintf(oledBuf,"Connection");
		OLED_ShowString(24,36,(u8*)oledBuf,16);//8*16 “ABC”
		OLED_Refresh();
	
	ESP8266_Init();					//初始化ESP8266
	OLED_Clear();
	sprintf(oledBuf,"Waiting For");
	OLED_ShowString(16,0,(u8*)oledBuf,16);//8*16 “ABC”
	sprintf(oledBuf,"MQTT Server");
	OLED_ShowString(16,18,(u8*)oledBuf,16);//8*16 “ABC”
	sprintf(oledBuf,"Connection");
	OLED_ShowString(24,36,(u8*)oledBuf,16);//8*16 “ABC”
	OLED_Refresh();	
	while(OneNet_DevLink())//接入OneNET
		delay_ms(500);
			
	
	OLED_Clear();	
	
	TIM2_Int_Init(4999,7199);
	TIM3_Int_Init(2499,7199);
	
	BEEP = 0;//鸣叫提示接入成功
	delay_ms(250);
	BEEP = 1;
	
	OneNet_Subscribe(devSubTopic, 1);
	
	while(1)
	
		if(timeCount % 40 == 0)//1000ms / 25 = 40 一秒执行一次
		
			/********** 温湿度传感器获取数据**************/
			DHT11_Read_Data(&humidityH,&humidityL,&temperatureH,&temperatureL);
			
			/********** 光照度传感器获取数据**************/
			if (!i2c_CheckDevice(BH1750_Addr))
			
				Light = LIght_Intensity();
			
			
			/********** 读取LED0的状态 **************/
			Led_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
			
			/********** 报警逻辑 **************/
			if(alarm_is_free == 10)//报警器控制权是否空闲 alarm_is_free == 10 初始值为10
			
				if((humidityH < 80) && (temperatureH < 30) && (Light < 1000))alarmFlag = 0;
				else alarmFlag = 1;
			
			if(alarm_is_free < 10)alarm_is_free++;
//			DEBUG_LOG("alarm_is_free = %d", alarm_is_free);
//			DEBUG_LOG("alarmFlag = %d\\r\\n", alarmFlag);

			
			/********** 输出调试信息 **************/
			DEBUG_LOG(" | 湿度:%d.%d C | 温度:%d.%d %% | 光照度:%.1f lx | 指示灯:%s | 报警器:%s | ",humidityH,humidityL,temperatureH,temperatureL,Light,Led_Status?"关闭":"【启动】",alarmFlag?"【启动】":"停止");
		
		if(++timeCount >= 150)	// 5000ms / 25 = 200 发送间隔5000ms
		
			Led_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);//读取LED0的状态
			DEBUG_LOG("==================================================================================");
			DEBUG_LOG("发布数据 ----- OneNet_Publish");
			sprintf(PUB_BUF,"\\"Hum\\":%d.%d,\\"Temp\\":%d.%d,\\"Light\\":%.1f,\\"Led\\":%d,\\"Beep\\":%d",
				humidityH,humidityL,temperatureH,temperatureL,Light,Led_Status?0:1,alarmFlag);
			OneNet_Publish(devPubTopic, PUB_BUF);
			DEBUG_LOG("==================================================================================");
			timeCount = 0;
			ESP8266_Clear();
		
		
		dataPtr = ESP8266_GetIPD(3);
		if(dataPtr != NULL)
			OneNet_RevPro(dataPtr);
		delay_ms(10);
	

小程序开发:

1.工具下载:

1.下载 Node.js (p2hp.com)

2.微信开发者工具下载地址与更新日志 | 微信开放文档 (qq.com)

3.安装VUE

npm install -g @vue/cli --registry https://registry.npm.taobao.org

4.安装vscode插件:(为了代码提示和语法报错)

WXML - Language Service
VEtur
SCSS Formatter

咱用的小程序开发是基于vue框架:所以可以花10秒钟学了下

mpvue快速入门:

mpvue (github 地址请参见)是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。

#实践案例

快速上手 | mpvue.com

2.源码编写:

源码创建:

1.vscode打开个文件夹 然后新建终端输入

vue init mpvue/mpvue-quickstart my-project

出现问题:

解决:

填写信息:随便填

2.为了实现vscode编写代码更新到小程序端

cd my-project
npm install
npm run dev //跑起代码监听 

使用wx助手使用测试号 不使用云开发 打开刚才的文件夹即可

3.没出错接着安装vue插件

npm install sass-loader@5.0.0 --save-dev
npm install node-sass@8.0.0 --save-dev
npm install mqtt@3.0.0 --save

基本后边跑监听代码功能 出错的话 解决方法:
基本问题是mqtt和sass版本不兼容 把原本的卸载重新安装即可

或者查看https://www.programminghunter.com/article/25802380535/


查看有无安装好:

4.源码修改:

修改小程序最底下的图标流程:

iconfont-阿里巴巴矢量图标库

1.在src里边的app.json 修改图标和文字

2.改完代码提示错误:解决方法(就是上边的安装vue插件的问题):

Module build failed: Error: Cannot find module 'node-sass’报错问题_夕阳下美了剪影的博客-CSDN博客_module build failed

3.修改源码 (最后能把主页替换我写的 保存没问题就代码编写的环境没问题了 )

主界面的页面修改:

src/pages/index/index.vue
路径

<template>
  <div class="wrapper">
    <div class="header-wrapper">
      <div class="header-title">
        <span>空气质量-良好</span>
        <span>深圳市</span>
      </div>
      <div class="header-text">
        <span>55</span>
        <span></span>
      </div>
      <div class="weather-advice">空气质量良好,出门记得带好口罩!</div>
    </div>

    <div class="body-wrapper">
      <div class="data-wrapper">
        <div class="data">
          <img class="data-logo" src="/static/images/wendu.png" />
          <div class="data-text">
            <div class="data-title">温度</div>
            <div class="data-value"> Temp </div>
          </div>
        </div>
        <div class="data">
          <img class="data-logo" src="/static/images/shidu.png" />
          <div class="data-text">
            <div class="data-title">湿度</div>
            <div class="data-value"> Hum %</div>
          </div>
        </div>
      </div>

      <div class="data-wrapper">
        <div class="data">
          <img class="data-logo" src="/static/images/guangzhao.png" />
          <div class="data-text">
            <div class="data-title">光照度</div>
            <div class="data-value"> Light Lx</div>
          </div>
        </div>
        <div class="data">
          <img class="data-logo" src="/static/images/led.png" />
          <div class="data-text">
            <div class="data-title">客厅灯</div>
            <div class="data-value">
              <switch @change="onLedChange" :checked="Led" color="#3d7ef9" />
            </div>
          </div>
        </div>
      </div>

      <div class="data-wrapper">
        <div class="data">
          <img class="data-logo" src="/static/images/baojin.png" />
          <div class="data-text">
            <div class="data-title">报警器</div>
            <switch @change="onBeepChange" :checked="Beep" color="#3d7ef9" />
          </div>
        </div>
      </div>
    </div>
    <div class="body"></div>
  </div>
</template>

<script>
import  connect  from "mqtt/dist/mqtt.js";


const mqttUrl = "wxs://你服务器地址:8084/mqtt";

export default 
  data() 
    return 
      client: ,
      Temp: 0,
      Hum: 0,
      Light: 0,
      Led: false,
      Beep: false,
    ;
  ,

  components: ,

  methods: 

    onLedChange(event)
      var that = this
      console.log(event.mp.detail)
      let sw = event.mp.detail.value
      that.Led = sw
      if(sw)
        that.client.publish('/mysmarthome/sub','"target":"LED","value":1',function(err)
          if(!err)
          
            console.log("成功下发命令---开灯")
          
        )
      else
        that.client.publish('/mysmarthome/sub','"target":"LED","value":0',function(err)
          if(!err)
          
            console.log("成功下发命

基于微信小程序的智能推荐点餐系统(附全部代码)

一、前言

结合餐饮行业中消费者和商家的需求,设计并实现了一个包含点餐微信小程序、餐饮管理应用在内的智能推荐点餐系统。该系统不仅可以帮助消费者快速地找到自己喜欢吃的菜品和享受自由便捷的点餐服务,还可以帮助商家管理餐饮相关信息并且了解自己的运营情况。

本系统全部代码见文末,大家自行下载即可~ 

二、系统相关技术

1. 餐饮平台开发相关技术

  • 微信小程序
  • uni-app 框架
  • SpringBoot 框架
  • 数据库

2. 推荐系统相关技术

  • 基于内容的推荐算法
  • 基于近邻的协同过滤算法
  • 基于关联规则的推荐算法

三、系统展示

1. 菜单显示页面

 

 

 

2. 订单确认页面

3. 账单详情页面

 

4. 用餐评价页面 

 

 5. 管理员与用户信息管理

6. 菜品管理界面

7. 订单信息管理

8. 销售情况统计界面

四、完整项目实现教程以及全部代码下载

https://download.csdn.net/download/weixin_47367099/85141455

以上是关于基于stm32f103C8T6-小程序智能家居项目实战-自绘PCB到实现功能一条龙+30分钟解决-各种bug已修复的主要内容,如果未能解决你的问题,请参考以下文章

stm32f103c8t6 usart1不工作

stm32F103RCT6概括

STM32F103C8T6+IIC OLED 0.96简单使用带串口调试输入出工程模板

会stm32f429好学stm32f103吗

STM32F103C8T6+ESP-01S+MQTT服务器实现数据上传和接收

stm32f407H库和stm32f103H库有区别吗