基于STM32+ESP8266打造智能家居溫濕度監控系統(附源碼接線圖)

摘要:?本文將介紹如何使用STM32單片機、ESP8266 Wi-Fi模塊和Python Flask框架構建一個完整的物聯網系統,實現傳感器數據采集、無線傳輸、云端存儲及Web可視化展示。

關鍵詞:?STM32, ESP8266, 傳感器, Flask, 物聯網, 云平臺, 數據可視化

1. 系統概述

本系統以STM32作為主控芯片,負責采集傳感器數據,并通過ESP8266模塊將數據發送至云平臺。云平臺采用輕量級的Flask框架搭建,接收并存儲數據,同時提供Web界面實時顯示傳感器數值變化曲線。

1.1 系統架構

以下是系統架構圖:

?

1.2 功能模塊
  • 傳感器節點:?采集環境數據,例如溫度、濕度、光照強度等。
  • STM32微控制器:?控制傳感器數據采集,并將數據通過串口發送至ESP8266模塊。
  • ESP8266 Wi-Fi模塊:?連接Wi-Fi網絡,并將數據通過HTTP協議發送至云平臺。
  • Flask Web服務器:?接收傳感器數據并存儲到數據庫,同時提供Web API接口供前端訪問。
  • 數據庫:?存儲傳感器數據,例如使用SQLite或MySQL。
  • Web前端:?使用HTML、CSS和JavaScript實現數據可視化展示,例如使用ECharts或Chart.js繪制圖表。

2. 硬件設計

2.1 元器件清單
序號元器件名稱型號數量備注
1STM32開發板STM32F103C8T61
2ESP8266模塊ESP8266-011
3DHT11傳感器-1或其他傳感器
4杜邦線-若干
2.2 電路連接圖
  • 請根據實際使用的傳感器和模塊修改以下連接方式。

3. 軟件設計

3.1 STM32代碼
  • 使用STM32CubeMX生成初始化代碼,并配置串口和傳感器讀取功能。
  • 定時采集傳感器數據,并通過串口發送至ESP8266模塊。
// ... STM32初始化代碼 ...// DHT11數據結構體
typedef struct {uint8_t humidity;uint8_t temperature;
} DHT11_Data;// 讀取DHT11數據
DHT11_Data DHT11_Read(void);// 發送數據到ESP8266
void ESP8266_Send(char *data);int main(void)
{// ... 初始化代碼 ...while (1) {DHT11_Data dht11_data = DHT11_Read();char data[50];sprintf(data, "temperature=%d&humidity=%d", dht11_data.temperature, dht11_data.humidity);ESP8266_Send(data);HAL_Delay(5000); // 5秒采集一次數據}
}
3.2 ESP8266配置
  • 使用AT指令配置ESP8266模塊為Station模式,并連接Wi-Fi網絡。
  • 將STM32發送的數據通過HTTP POST請求發送至Flask服務器。
// ESP8266 AT指令配置
AT+CWMODE=1  // 設置為Station模式
AT+CWJAP="your_ssid","your_password"  // 連接Wi-Fi// 發送HTTP POST請求
AT+CIPSTART="TCP","your_server_ip",5000  // 建立TCP連接
AT+CIPSEND=xxx  // 發送數據長度
> POST /data HTTP/1.1
> Host: your_server_ip
> Content-Type: application/x-www-form-urlencoded
> Content-Length: xxx> temperature=25&humidity=60  // 傳感器數據
3.3 Flask服務器代碼
  • 使用Flask框架創建Web應用,并定義路由接收傳感器數據。
  • 將數據存儲到數據庫,并提供API接口供前端獲取數據。
from flask import Flask, request, jsonify
import sqlite3app = Flask(__name__)# 數據庫連接
conn = sqlite3.connect('sensor_data.db')
cursor = conn.cursor()# 創建數據表
cursor.execute('''CREATE TABLE IF NOT EXISTS sensor_data (id INTEGER PRIMARY KEY AUTOINCREMENT,temperature REAL,humidity REAL,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)
''')@app.route('/data', methods=['POST'])
def receive_data():temperature = request.form.get('temperature')humidity = request.form.get('humidity')# 將數據插入數據庫cursor.execute("INSERT INTO sensor_data (temperature, humidity) VALUES (?, ?)", (temperature, humidity))conn.commit()return jsonify({'status': 'success'})# 獲取最新傳感器數據
@app.route('/api/latest_data')
def get_latest_data():cursor.execute("SELECT * FROM sensor_data ORDER BY timestamp DESC LIMIT 1")data = cursor.fetchone()return jsonify({'temperature': data[1], 'humidity': data[2]})if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)
3.4 Web前端代碼
  • 使用JavaScript和圖表庫(例如ECharts)獲取傳感器數據并繪制實時圖表。
<!DOCTYPE html>
<html>
<head><title>傳感器數據可視化</title><script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3/dist/echarts.min.js"></script>
</head>
<body><div id="chart" style="width: 800px; height: 400px;"></div><script>var chartDom = document.getElementById('chart');var chart = echarts.init(chartDom);function updateChartData() {fetch('/api/latest_data').then(response => response.json()).then(data => {// 更新圖表數據chart.setOption({xAxis: {type: 'category',data: ['溫度', '濕度']},yAxis: {type: 'value'},series: [{data: [data.temperature, data.humidity],type: 'bar'}]});});}// 定時更新數據setInterval(updateChartData, 5000);</script>
</body>
</html>

4. 系統測試

  • 編譯并燒錄STM32代碼,確保傳感器數據采集正常。
  • 配置ESP8266模塊連接Wi-Fi網絡,并測試與Flask服務器的通信。
  • 運行Flask Web應用,并訪問Web界面查看數據圖表。

5. 總結

本文詳細介紹了如何使用STM32、ESP8266和Flask構建一個完整的物聯網系統,實現傳感器數據采集、無線傳輸、云端存儲及Web可視化展示。通過學習本文,你可以了解物聯網系統開發的基本流程,并掌握相關技術知識。

附錄

  • STM32CubeMX下載:?https://www.st.com/en/development-tools/stm32cubemx.html
  • ESP8266 AT指令集:?Technical Documents | Espressif Systems

**注意:**

* 代碼示例中使用DHT11傳感器作為演示,你可以根據實際需求選擇其他類型的傳感器。
* 請將代碼中的占位符替換為實際的Wi-Fi信息、服務器IP地址等。
* 本文僅提供一個基本的框架,實際應用中需要根據具體需求進行調整和優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35534.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring底層原理之proxyBeanMenthod實例 動態代理 反射 Bean的攔截

proxyBeanMenthod 假設我們要進行一個系統的二次開發 然后第一次開發我們實用的是XML聲明bean 二次開發的時候要用注解 我們如何把bean都加載上來呢 我們首先創建一個全新的配置類 package com.bigdata1421.config;public class SpringConfig32 { } 我們創建一個APP 加載…

Perl語言入門學習讀物

1. PERL 是什么? Perl 最初的設計者為Larry Wall&#xff0c;Perl借取了C、sed、awk、shell scripting以及很多其他程序語言的特性。Perl一般被稱為“實用報表提取語言”(PracticalExtraction andReportLanguage)&#xff0c;有時也被稱做“病態折中垃圾列表器”(Pathologica…

springboot+vue3無感知刷新token實戰

目錄 一、java后端 1、token構造實現類 ①驗證碼方式實現類 ②刷新token方式實現類 2、token相關操作&#xff1a;setCookie ①createToken ②refreshToken 二、前端&#xff08;vue3axios&#xff09; web網站中&#xff0c;前后端交互時&#xff0c;通常使用token機制…

全球最快的 JSON 文件查詢工具

本文字數&#xff1a;1684&#xff1b;估計閱讀時間&#xff1a;5分鐘 審校&#xff1a;莊曉東&#xff08;魏莊&#xff09; 本文在公眾號【ClickHouseInc】首發 介紹 在 ClickHouse&#xff0c;我們熱衷于基準測試和性能優化。所以當我第一次看到 Hacker News 上那篇“查詢大…

代碼隨想錄算法訓練營day31|134.加油站、135. 分發糖果、406.根據身高重建隊列

134.加油站 如下圖所示&#xff1a; 當索引一道2的時候&#xff0c;剩余油量的總量13-6 < 0&#xff0c;這個時候說明以索引0為起點不合適&#xff0c;將起點更新為索引3. 兩點證明&#xff1a; 1.如果我們從藍色段中間選一個點開始&#xff0c;是不是最后sumGas就不小于0…

從靈感到成品:使用AI生成博客文章的完整指南

在信息爆炸的時代&#xff0c;每個人都有講述自己故事的權利和需求。博客作為一種表達方式&#xff0c;不僅能記錄個人經歷&#xff0c;還能分享知識和觀點。然而&#xff0c;許多人在寫博客文章時&#xff0c;常常會遇到靈感枯竭、時間不夠用或者不知道如何開始等問題。幸運的…

光伏儲能系統/安科瑞DTSD1352-CF雙向計量表-安科瑞 蔣靜

1 長期以來&#xff0c;我國施行居民用電低價政策&#xff0c;居民電價大幅低于供電成本&#xff0c;雖然實施了全天分三時段的階梯電價政策&#xff0c;但過去近10年中高峰節電的效果卻不夠明顯。從分時用電運作機制來看&#xff0c;居民用電價格的波動幅度不大&#xff0c;但…

華為云鯤鵬架構docker部署2048小游戲

華為云鯤鵬架構docker部署2048小游戲 1. 鯤鵬架構ESC2. 配置docker3. 上傳2048鏡像4. 刪除容器,鏡像 1. 鯤鵬架構ESC 2. 配置docker 安裝dockeryum -y install docker開機啟動 systemctl enable docker啟動docker服務 systemctl start docker查詢docker的運行版本 docker -v3…

時序分析基本概念介紹——min pulse width 最小脈沖寬度

文章目錄 前言一、什么是 min pulse width&#xff1f;二、為什么檢查 min pulse width&#xff1f;三、如何設置 min pulse width約束&#xff1f;1. 在sdc里面定義2. library里面定義 四、如何檢查 min pulse width&#xff1f;五、如何修復 min pulse width&#xff1f;總結…

docker啟動ws-scrcpy和redroid記錄

git克隆最新的ws-scrcpy代碼 git clone gitgithub.com:NetrisTV/ws-scrcpy.git進入ws-scrcpy目錄新建Dockerfile文件&#xff0c;內容如下 FROM node:16-alpine WORKDIR /appRUN npm config set registry http://mirrors.cloud.tencent.com/npm/ RUN npm install -g node-gyp…

攻防世界-Web題目1

目錄 cookie 1、題目 2、知識點 3、思路 get_post 1、題目 2、知識點 3、思路 disabled_button 1、題目 2、知識點 3、思路 backup 1、題目 2、知識點 3、思路 cookie 1、題目 2、知識點 cookie&#xff0c;數據包 3、思路 題目提示我們cookie&#xff0c;抓…

Markdown中如何插入空行和空格

Markdown 是一種輕量級的標記語言&#xff0c;它的主要目標是以易讀易寫為優先&#xff0c;并兼容 HTML。雖然 Markdown 本身對于排版的要求比較寬松&#xff0c;但在某些情況下&#xff0c;我們可能需要在文檔中插入空行或空格來達到特定的排版效果。 插入空行 在Markdown中…

【ai】trition:tritonclient.utils.shared_memory 僅支持linux

Can’t find tritonclient.utils.shared_memory on WIN10 #4149yolov4的python客戶端 導入以后,windows 的pycharm 就是看不到折騰了很久:SaviorEnv 環境下安裝tritonclient[all]也會失敗 (base) C:\Users\zhangbin>conda create -n SaviorEnv python=3.8 Collecting pack…

ubuntu 18 虛擬機安裝(1)

ubuntu 18 虛擬機安裝 ubuntu 18.04.6 Ubuntu 18.04.6 LTS (Bionic Beaver) https://releases.ubuntu.com/bionic/ 參考&#xff1a; 設置固定IP地址 https://blog.csdn.net/wowocpp/article/details/126160428 https://www.jianshu.com/p/1d133c0dec9d ubuntu-18.04.6-l…

元數據管理的發展歷程你了解嗎?元數據管理要克服哪些挑戰?

在當今的信息化時代&#xff0c;數據的價值已被廣泛認可&#xff0c;而元數據作為描述數據的數據&#xff0c;其作用日益凸顯。元數據管理&#xff0c;作為確保數據質量、促進數據共享和提高數據透明度的關鍵環節&#xff0c;對企業的數據戰略至關重要。隨著技術的發展&#xf…

程序設計中對內存分配管理的思考,進程內存、線程內存、共享池、棧、堆

設計一個程序&#xff0c;要考慮如何分配和管理內存&#xff0c;以下是對所有內存分配和管理類型的總結。 第一、進程級的內存資源&#xff0c;也叫全局靜態內存&#xff0c;其生命周期是伴隨整個進程的運行期間&#xff0c;可以用作在進程范圍內共享數據的方法。對應于C語言的…

C#1.0-11.0所有歷史版本主要特性總結

文章目錄 前言名詞解釋主要版本一覽表各版本主要特性一句話總結 C# 1.0 (Visual Studio 2002, .Net Framework 1.0)C# 2.0 (Visual Studio 2005, .Net Framework 2.0)C# 3.0 (Visual Studio 2008, .Net Framework 3.0)C# 4.0 (Visual Studio 2010, .Net Framework 4)C# 5.0 (V…

Bigram 分詞學習

Bigram 分詞&#xff1a;概念、應用與中文實踐 Bigram 分詞是一種基礎而有效的文本處理技術&#xff0c;特別是在自然語言處理中有著廣泛的應用。本文將詳細解釋 Bigram 分詞的概念、它在各個領域的應用&#xff0c;以及在中文處理中的獨特優勢和實踐。 什么是 Bigram 分詞&a…

DataWhale - 吃瓜教程學習筆記(三)

學習視頻&#xff1a;第3章-對數幾率回歸_嗶哩嗶哩_bilibili 西瓜書對應章節&#xff1a; 3.3 對數幾率回歸 sigmoid函數 極大似然估計建模 信息論 以概率論、隨機過程為基本研究工具&#xff0c;研究廣義通信系統的整個過程 - 信息熵 &#xff08;信息期望&#xff09; 度…

Windows bat 提取多個目錄下的文件,到一個目錄

批處理命令 echo off setlocalrem 設置源目錄和目標目錄 set "sourceDirE:\motrix" set "targetDirE:\新建文件夾"rem 創建目標目錄&#xff0c;如果不存在 if not exist "%targetDir%" mkdir "%targetDir%"rem 循環遍歷源目錄中的所…