STM32MP157A單片機移植Linux系統使用python鏈接云服務器

思維導圖

需求分析

stm32mp157a單片機上移植Linux操作系統,包括LCD驅動、觸摸驅動、Ethernet/WiFi支持,設備樹信息包括ADC、GPIO、LCD,使用QT上位機在PC端顯示,通過TCP與stm32交互,將ad數據傳輸到PC端和云服務器,使用阿里云服務器,裝載MySQL數據庫包括所有上傳的數據。

云端服務器環境搭建

云端服務器中MySQL數據庫,QTCreator,python環境搭建的各個Linux命令

python實現tcp服務端/客戶端通信

tcp_server.py:需要注意的是,修改MySQL的密碼為自己的MySQL密碼,修改端口號,該代碼主要實現python下tcp服務端的監聽功能,并將接受到的參數保存到MySQL數據庫內。

import socket
import struct
import mysql.connector# MySQL 數據庫配置
db_config = {'host': 'localhost','user': 'root','password': '<你的密碼>',  # 替換為你的 MySQL root 密碼'database': 'test_db'  # 替換為你的數據庫名稱
}# 創建數據庫連接
def create_db_connection():try:connection = mysql.connector.connect(**db_config)return connectionexcept mysql.connector.Error as err:print(f"數據庫連接失敗: {err}")return None# 插入數據
def insert_sensor_data(connection, hum, tem):try:cursor = connection.cursor()query = "INSERT INTO sensor_data (hum, tem) VALUES (%s, %s)"cursor.execute(query, (hum, tem))connection.commit()print(f"數據插入成功: hum={hum}, tem={tem:.2f}")except mysql.connector.Error as err:print(f"數據插入失敗: {err}")# TCP 服務器
def start_tcp_server(host='0.0.0.0', port=<你的端口>):# 創建數據庫連接connection = create_db_connection()if connection is None:return# 創建 TCP socketserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind((host, port))server_socket.listen(5)print(f"TCP 服務器啟動,監聽 {host}:{port}")while True:# 接受客戶端連接client_socket, addr = server_socket.accept()print(f"Connected by {addr}")try:data = client_socket.recv(1024).decode('utf-8')  # 解碼數據if data:print(f"接收到數據: {data}")# 解析數據(假設數據格式為 "hum,tem")hum, tem = data.split(',')  # 按逗號分隔hum = int(hum)  # 將 hum 轉換為 inttem = float(tem)  # 將 tem 轉換為 float# 將數據插入數據庫insert_sensor_data(connection, hum, tem)# 接收數據(8字節:4字節int + 4字節float)#data = client_socket.recv(8)#if len(data) == 8:# 解析數據#hum = struct.unpack('!i', data[:4])[0]  # 解析int#tem = struct.unpack('<f', data[4:])[0]  # 解析float#print(f"Received int: {hum}, float: {tem}")#insert_sensor_data(connection, hum, tem) else:print("Invalid data received")except Exception as e:print(f"Error: {e}")finally:client_socket.close()# 關閉數據庫連接connection.close()if __name__ == "__main__":start_tcp_server()

tcp_client.py:云服務器本地python下tcp客戶端測試代碼

import socketdef send_sensor_data(host='<云端服務器IP>', port=<端口號>, hum=50, tem=25.5):client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect((host, port))message = f"{hum},{tem}"client_socket.send(message.encode('utf-8'))client_socket.close()print(f"數據已發送: {message}")if __name__ == "__main__":send_sensor_data()

tcp_client.c:本地Linux-c程序tcp客戶端上傳數據到云服務器代碼,需要注意字節序的問題

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define SERVER_IP "<云端服務器IP.address>"  // 替換為云端的IP地址
#define SERVER_PORT <端口號>int main() {int sock;struct sockaddr_in server_addr;// 創建Socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}// 設置服務器地址server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {perror("Invalid address/ Address not supported");exit(EXIT_FAILURE);}// 連接到服務器if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {perror("Connection failed");exit(EXIT_FAILURE);}// 準備數據int int_value = 42;          // 示例int數據float float_value = 3.14f;   // 示例float數據// 序列化數據(將int和float轉換為字節流)char buffer[8];*(int *)buffer = htonl(int_value);               // 將int轉換為網絡字節序*(float *)(buffer + 4) = float_value;           // 直接存儲float(注意字節序問題)// 發送數據if (send(sock, buffer, sizeof(buffer), 0) < 0) {perror("Send failed");close(sock);exit(EXIT_FAILURE);}printf("Data sent: int=%d, float=%.2f\n", int_value, float_value);// 關閉Socketclose(sock);return 0;
}

以上代碼通過python語言進行tcp通信,以本地作為tcp客戶端上傳數據給云端tcp服務端,本地采集傳感器數據,此處客戶端代碼僅做示例,直接傳輸數據,具體根據實際情況將采集數據傳輸即可,云端tcp服務端將接受到的數據保存到云端MySQL數據庫,在云端數據庫中可以查看

擴展

以上示例代碼僅用于基礎理解,使用比較簡單的方式實現從本地獲取數據,通過tcp直接傳輸到云端服務器并保存到MySQL數據庫的功能,在實際開發中,可以增加mqtt數據傳輸json數據流,根據上端需求可以使用多進程、多線程對各模塊進行分組處理,多進程間可以使用共享內存、消息隊列、socket套接字進行交互等方式對整體架構進行增碼。

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

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

相關文章

【MySQL】Can‘t connect to server in ‘localhost‘

【問題】連接MySQL數據庫時報錯&#xff1a; 【原因】沒有啟動MySQL服務 【解決方法】&#x1f447;&#x1f447;&#x1f447; 1.以管理員身份運行PowerShell 2.執行命令&#xff1a;net start MySQL 提示 “MySQL服務已經啟動成功” 就說明成功了&#xff0c;這時再連…

OceanBase-obcp-v3考試資料梳理

集群架構 基本概念 集群: 集群由一個或多個Region組成,Region 由一個或多個Zone組成,Zone由一個或多個OBServer組成,每個OBServer里有若干個partition的Replica。 Region: 對應物理上的一個城市或地域,當OB集群由多個Region組成時, 數據庫的數據和服務能力就具備地域…

Vue 系列之:組件通訊

子組件調用父組件方法 1、直接在子組件中通過 this.$parent.event 來調用父組件的方法 父組件&#xff1a; <template><p><child></child></p> </template> <script>import child from ./child;export default {components: {chi…

ComfyUI簡介

一、ComfyUI 是什么&#xff1f; ComfyUI 是一款基于節點的圖形用戶界面&#xff08;GUI&#xff09;&#xff0c;專為 Stable Diffusion 設計。它通過模塊化節點連接的方式構建復雜的圖像生成工作流&#xff0c;用戶可自由組合加載模型、輸入提示詞、調整采樣器等操作模塊&am…

我的兩個醫學數據分析技術思路

我的兩個醫學數據分析技術思路 從臨床上獲得的或者公共數據庫數據這種屬于觀察性研究&#xff0c;是對臨床診療過程中自然產生的數據進行分析而獲得疾病發生發展的規律等研究成果。再細分&#xff0c;可以分為獨立危險因素鑒定和預測模型構建兩種。 獨立危險因素鑒定是一直以…

【YOLOv12改進trick】StarBlock引入YOLOv12,創新漲點優化,含創新點Python代碼,方便發論文

??改進模塊??:StarBlock ??解決問題??:采用StarBlock將輸入數據映射到一個極高維的非線性特征空間,生成豐富的特征表示,使得模型在處理復雜數據時更加有效。 ??改進優勢??:簡單粗暴的星型乘法漲點卻很明顯 ??適用場景??:目標檢測、語義分割、自然語言處理…

pyside6學習專欄(九):在PySide6中使用PySide6.QtCharts繪制6種不同的圖表的示例代碼

PySide6的QtCharts類支持繪制各種型狀的圖表&#xff0c;如面積區域圖、餅狀圖、折線圖、直方圖、線條曲線圖、離散點圖等&#xff0c;下面的代碼是采用示例數據繪制這6種圖表的示例代碼,并可實現動畫顯示效果&#xff0c;實際使用時參照代碼中示例數據的格式將實際數據替換即可…

《今日AI-人工智能-編程日報》

1. 字節跳動發布AI編程工具Trae國內版 發布背景&#xff1a;字節跳動于2025年3月3日正式推出國內版AI編程工具Trae&#xff0c;這是國內首個AI原生集成開發環境&#xff08;AI IDE&#xff09;&#xff0c;旨在提升開發者的編程效率與智能化體驗。 核心功能&#xff1a; 搭載d…

doris: MySQL

Doris JDBC Catalog 支持通過標準 JDBC 接口連接 MySQL 數據庫。本文檔介紹如何配置 MySQL 數據庫連接。 使用須知? 要連接到 MySQL 數據庫&#xff0c;您需要 MySQL 5.7, 8.0 或更高版本 MySQL 數據庫的 JDBC 驅動程序&#xff0c;您可以從 Maven 倉庫下載最新或指定版本的…

【LangChain】存儲與管理對話歷史

0. 代碼演示 from langchain_community.chat_message_histories import SQLChatMessageHistorydef get_session_history(session_id):# 通過 session_id 區分對話歷史&#xff0c;并存儲在 sqlite 數據庫中return SQLChatMessageHistory(session_id, "sqlite:///memory.d…

從0開始的操作系統手搓教程21:進程子系統的一個核心功能——簡單的進程切換

目錄 具體說說我們的簡單RR調度 處理時鐘中斷處理函數 調度器 schedule switch_to 我們下面&#xff0c;就要開始真正的進程切換了。在那之前&#xff0c;筆者想要說的是——我們實現的進程切換簡單的無法再簡單了——也就是實現一個超級簡單的輪詢調度器。 每一個進程按照…

mysql新手常見問題解決方法總結

1. 安裝與配置問題 1.1 無法安裝MySQL Server MySQL Server安裝失敗是新手常見的問題之一&#xff0c;以下是具體原因及解決方案&#xff1a; 系統要求不滿足&#xff1a;MySQL對操作系統有最低版本要求&#xff0c;如Windows 7 SP1及以上、macOS 10.13及以上。若系統版本過…

數字組合(信息學奧賽一本通-1291)

【題目描述】 有n個正整數&#xff0c;找出其中和為t(t也是正整數)的可能的組合方式。如&#xff1a;n5,5個數分別為1,2,3,4,5&#xff0c;t5&#xff1b;那么可能的組合有514和523和55三種組合方式。 【輸入】 輸入的第一行是兩個正整數n和t&#xff0c;用空格隔開&#xff0c…

搜索引擎(基于java在線文檔)

背景&#xff1a; 基于java文檔的搜索引擎&#xff0c;可以輸入搜索詞&#xff0c;然后就可以查詢出與搜索詞相關的文檔。該項目的最主要的工作是要構建索引&#xff0c;就是正排和倒排索引。正排索引&#xff1a;根據文檔id獲取到文檔&#xff1b;倒排索引&#xff1a;根據搜…

【每日學點HarmonyOS Next知識】web滾動、事件回調、selectable屬性、監聽H5內部router、Grid嵌套時高度設置

【每日學點HarmonyOS Next知識】web滾動、事件回調、selectable屬性、監聽H5內部router、Grid嵌套時高度設置 1、HarmonyOS WebView加載url無法滾動&#xff1f; scroll 里面嵌套webView&#xff0c;demo參考&#xff1a; // xxx.ets import web_webview from ohos.web.webv…

Flink性能指標詳解MetricsAnalysis

文章目錄 Flink 組成1.JobManager2.TaskManager3.ResourceManager4.Dispatcher5.Client6. Env JobManager MetricsTaskManager Metrics Flink 組成 1.JobManager 管理任務 作業調度&#xff1a;負責接收和調度作業&#xff0c;分配任務到 TaskManager。資源管理&#xff1a;…

Flutter底層實現

1. Dart 語言 Dart 是 Flutter 的主要編程語言。Dart 設計之初就是為了與 JavaScript 兼容&#xff0c;并且可以編譯為機器代碼運行。Dart 提供了一些特性&#xff0c;如異步支持&#xff08;通過 async 和 await&#xff09;&#xff0c;這使得編寫高效的網絡請求和復雜動畫變…

< 自用文兒 > CertBot 申請 SSL 證書 使用 challenge 模式 避開防火墻的阻擋

環境&#xff1a; 騰訊 VPS 騰訊會向你銷售 SSL &#xff0c; 這個本是免費的。CertBot 默認申請證書要用到 80 端口&#xff0c;會蹭邊什么什么條款&#xff0c;備案法律來阻止80端口的通訊&#xff0c;沒有網站也一樣被阻攔。 通過騰訊買的域名&#xff1a; bestherbs.cn …

【AI】【Unity】關于Unity接入DeepseekAPI遇到的坑

前言 由于deepseek網頁端在白天日常抽風&#xff0c;無法正常的使用&#xff0c;所以調用API就成了目前最好的選擇&#xff0c;尤其是Deepseek的API價格低得可怕&#xff0c;這不是和白送的一樣嗎&#xff01;然后使用過很多本地部署接入API的方式&#xff0c;例如Chatbox、Pa…

【微知】Mellanox驅動中to是什么?有哪些超時時間?(time out,心跳2s,reset 1分鐘)

to是tout縮寫&#xff0c;tout是time out 單位是毫秒。 static const u32 tout_def_sw_val[MAX_TIMEOUT_TYPES] {[MLX5_TO_FW_PRE_INIT_TIMEOUT_MS] 120000, # 2min。預初始化的總超時時間[MLX5_TO_FW_PRE_INIT_ON_RECOVERY_TIMEOUT_MS] 7200000, #設備恢復過程中的固件預初…