STM32MP157A单片机移植Linux系统使用python链接云服务器
- 开源代码
- 2025-09-12 16:12:02

思维导图 需求分析
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 connection except 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 mit() 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 socket server_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 转换为 int tem = 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 socket def 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; // 创建Socket if ((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); // 关闭Socket close(sock); return 0; }以上代码通过python语言进行tcp通信,以本地作为tcp客户端上传数据给云端tcp服务端,本地采集传感器数据,此处客户端代码仅做示例,直接传输数据,具体根据实际情况将采集数据传输即可,云端tcp服务端将接受到的数据保存到云端MySQL数据库,在云端数据库中可以查看
扩展以上示例代码仅用于基础理解,使用比较简单的方式实现从本地获取数据,通过tcp直接传输到云端服务器并保存到MySQL数据库的功能,在实际开发中,可以增加mqtt数据传输json数据流,根据上端需求可以使用多进程、多线程对各模块进行分组处理,多进程间可以使用共享内存、消息队列、socket套接字进行交互等方式对整体架构进行增码。
STM32MP157A单片机移植Linux系统使用python链接云服务器由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“STM32MP157A单片机移植Linux系统使用python链接云服务器”