当前位置: 首页 > article >正文

MicroPython 智能硬件开发完整指南

第一部分:MicroPython 基础

1. MicroPython简介

  • 定义:专为微控制器设计的精简Python 3实现,支持硬件直接操作。
  • 特点
    • 语法兼容Python 3,但移除复杂功能(如多线程)。
    • 支持GPIO、PWM、I2C、SPI等硬件接口。
    • 适用于ESP32、ESP8266、Raspberry Pi Pico等开发板。

2. 开发环境搭建

硬件准备
  • 推荐开发板:ESP32(性价比高,WiFi/BLE双模)、Raspberry Pi Pico(低成本,RP2040芯片)。
  • 外设:杜邦线、面包板、传感器(DHT11、超声波模块等)。
软件配置
  1. 固件烧录
    • 下载固件:MicroPython官网
    • 烧录工具:esptool(ESP系列)、rp2-flash(树莓派Pico)。
  2. 编程工具
    • Thonny IDE(新手友好,内置REPL)。
    • VS Code + Pymakr插件(支持远程调试)。
第一个程序
# 点亮板载LED(ESP32示例)
from machine import Pin
import timeled = Pin(2, Pin.OUT)
while True:led.toggle()time.sleep(1)

第二部分:核心语法与硬件操作

1. 基础语法

变量与数据类型
# MicroPython支持标准Python类型
value = 42
name = "ESP32"
data = [1, 2, 3]
sensor_data = {"temp": 25.5, "humi": 60}
流程控制
# 条件与循环
if temperature > 30:alert()
elif temperature < 0:freeze()
else:normal()for i in range(10):print(i)while sensor.is_active():read_data()

2. 硬件交互

GPIO控制
from machine import Pinbutton = Pin(14, Pin.IN, Pin.PULL_UP)  # 按钮输入(上拉模式)
led = Pin(2, Pin.OUT)                 # LED输出if button.value() == 0:  # 按钮按下led.on()
PWM调光/调速
from machine import PWM, Pinpwm = PWM(Pin(13), freq=1000, duty=512)  # 频率1kHz,50%占空比
pwm.duty(256)  # 调至25%亮度
I2C/SPI通信
# I2C扫描设备(OLED显示屏为例)
from machine import I2C, Pini2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000)
devices = i2c.scan()  # 返回设备地址列表(如[0x3C])

第三部分:智能硬件开发案例

案例1:环境监测系统(温湿度+云端上传)

功能
  • 使用DHT11传感器采集温湿度。
  • 通过WiFi将数据上传到物联网平台(如阿里云、ThingsBoard)。
  • OLED屏幕本地显示数据。
硬件
  • ESP32开发板
  • DHT11温湿度传感器
  • OLED显示屏(SSD1306)
  • 面包板及杜邦线
代码示例
import network
import dht
import machine
import time
from umqtt.simple import MQTTClient
from ssd1306 import SSD1306_I2C# 硬件初始化
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
d = dht.DHT11(machine.Pin(4))# WiFi连接
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect("你的WiFi名", "密码")
while not sta.isconnected():time.sleep(1)# MQTT配置
client = MQTTClient("esp32", "mqtt服务器地址", port=1883, user="用户名", password="密码")
client.connect()# 主循环
while True:d.measure()temp = d.temperature()humi = d.humidity()# OLED显示oled.fill(0)oled.text(f"Temp: {temp}C", 0, 0)oled.text(f"Humi: {humi}%", 0, 20)oled.show()# 上传到MQTTclient.publish(b"sensor/temp", str(temp))client.publish(b"sensor/humi", str(humi))time.sleep(60)  # 每分钟上传一次

案例2:智能家居灯光控制(手机APP+语音)

功能
  • 通过手机APP远程控制LED开关。
  • 支持语音指令(如“开灯”)。
  • 自动根据光线强度调节亮度(可选光敏电阻)。
硬件
  • ESP32开发板
  • LED灯模块
  • 光敏电阻(ADC读取)
  • 继电器模块(控制高功率灯具)
  • 麦克风模块(如MAX9814,用于语音)
代码要点
  1. Web服务器控制(HTTP)
import socket
from machine import Pinled = Pin(2, Pin.OUT)def start_web_server():addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]s = socket.socket()s.bind(addr)s.listen(1)while True:conn, addr = s.accept()request = conn.recv(1024)if "GET /on" in request:led.on()elif "GET /off" in request:led.off()conn.send("HTTP/1.1 200 OK\n\nLight Control OK")conn.close()
  1. 语音控制(需结合离线语音识别模块)
    • 使用LD3320等模块,通过串口接收指令:
from machine import UART
uart = UART(1, 9600)
while True:if uart.any():cmd = uart.read().decode().strip()if "开灯" in cmd:led.on()

案例3:智能农业灌溉系统

功能
  • 土壤湿度检测(湿度传感器)。
  • 自动控制水泵浇水。
  • 数据上报至云端并生成报警阈值。
硬件
  • ESP8266开发板
  • 土壤湿度传感器(模拟量输出)
  • 5V水泵+继电器
  • 18650电池供电
代码逻辑
from machine import ADC, Pin
import network
import time# 初始化硬件
soil = ADC(Pin(34))  # ESP32的ADC引脚
pump = Pin(4, Pin.OUT)# 湿度阈值(需根据实测调整)
DRY_THRESHOLD = 2000  
WET_THRESHOLD = 1000def check_soil():value = soil.read()if value > DRY_THRESHOLD:pump.on()  # 开启水泵time.sleep(5)pump.off()return value# 主循环
while True:moisture = check_soil()print(f"当前湿度: {moisture}")time.sleep(3600)  # 每小时检测一次

案例4:GPS定位追踪器

功能
  • 通过GPS模块获取经纬度。
  • 通过4G模块(如SIM800L)发送位置到服务器。
  • 低功耗设计(定时唤醒)。
硬件
  • Raspberry Pi Pico(低功耗模式)
  • NEO-6M GPS模块
  • SIM800L 4G模块
  • 锂电池
关键代码
from machine import UART, Pin
import time# GPS数据解析
gps = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))
while True:if gps.any():data = gps.readline()if b'GPRMC' in data:  # 定位语句parts = data.split(',')if parts[2] == 'A':  # 有效定位lat = parts[3]  # 纬度lon = parts[5]  # 经度send_to_server(lat, lon)  # 通过4G发送time.sleep(10)

案例5:智能垃圾桶(超声波+舵机)

功能
  • 超声波检测用户靠近。
  • 舵机自动打开桶盖。
  • 满载检测(压力传感器)。
硬件
  • ESP32开发板
  • HC-SR04超声波模块
  • SG90舵机
  • 压力传感器(HX711模块)
代码片段
from machine import Pin, PWM, time_pulse
import time# 超声波测距
trigger = Pin(12, Pin.OUT)
echo = Pin(14, Pin.IN)def get_distance():trigger.off()time.sleep_us(2)trigger.on()time.sleep_us(10)trigger.off()pulse = time_pulse(echo, 1, 30000)  # 超时30msreturn pulse * 0.0343 / 2  # 单位:厘米# 舵机控制
servo = PWM(Pin(13), freq=50)
def open_lid():servo.duty(130)  # 角度对应占空比time.sleep(3)servo.duty(40)   # 关闭# 主逻辑
while True:dist = get_distance()if dist < 20:  # 距离小于20cm触发open_lid()time.sleep(1)

第四部分:调试与优化

1. 常见问题

问题解决方案
传感器无响应检查供电/引脚/代码逻辑
WiFi连接失败确认SSID/密码,重启路由器
内存不足使用gc.collect()手动回收

2. 性能优化

  • 减少全局变量:优先使用局部变量。
  • 硬件加速:使用machine模块原生函数(如time_pulse_us)。
  • 省电模式machine.deepsleep()结合外部唤醒。

第五部分:扩展学习资源

  1. 官方文档

    • MicroPython核心库
    • ESP32硬件API
  2. 开源项目参考

    • MicroPython GitHub仓库
    • 物联网项目合集
  3. 推荐硬件

    • 传感器包:DHT系列、MPU6050、BH1750。
    • 通信模块:LoRa模块(SX1276)、4G模块(SIM800L)。

文档说明

  • 本指南涵盖从基础到进阶的完整开发流程,建议按顺序学习并动手实践。
  • 所有代码均需根据实际硬件调整引脚和参数。
  • 建议搭配开发板实操,快速掌握物联网与智能硬件开发!

相关文章:

MicroPython 智能硬件开发完整指南

第一部分&#xff1a;MicroPython 基础 1. MicroPython简介 定义&#xff1a;专为微控制器设计的精简Python 3实现&#xff0c;支持硬件直接操作。特点&#xff1a; 语法兼容Python 3&#xff0c;但移除复杂功能&#xff08;如多线程&#xff09;。支持GPIO、PWM、I2C、SPI等…...

DeepLabv3+改进8:在主干网络中添加SIM注意力机制|助力涨点

🔥【DeepLabv3+改进专栏!探索语义分割新高度】 🌟 你是否在为图像分割的精度与效率发愁? 📢 本专栏重磅推出: ✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化 ✅ 即插即用模块:ASPP+升级、解码器 PS:订阅专栏提供完整代码 论文简介 在本文中,我们提出了…...

vue-cli3+vue2+elementUI+avue升级到vite+vue3+elementPlus+avue总结

上一个新公司接手了一个vue-cli3vue2vue-router3.0elementUI2.15avue2.6的后台管理项目&#xff0c;因为vue2在2023年底已经不更新维护了&#xff0c;elementUI也只支持到vue2&#xff0c;然后总结了一下vue3的优势&#xff0c;最后批准升级成为了vitevue3vue-router4.5element…...

电路原理(电容 集成电路NE555)

电容 1.特性&#xff1a;充放电&#xff0c;隔直流&#xff0c;通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加&#xff0c;但是多电容串联就不会&#xff0c;只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…...

QEMU源码全解析 —— 块设备虚拟化(2)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(1) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回讲解了几种虚拟化方式(全虚拟化、半虚拟化和硬件辅助虚拟化)的优缺点及其对比…...

[C++面试] 对通透比较器了解多少?(较少涉及,可跳过)

一、入门 1、什么是比较器 在 C 中&#xff0c;比较器是一个可调用对象&#xff08;函数、函数对象或 Lambda 表达式&#xff09;&#xff0c;用于定义元素之间的比较规则。 用途&#xff1a;通常作为参数传递给标准库中的排序函数或关联容器&#xff0c;以指定元素的顺序。…...

nslookup的使用

nslookup 是一个网络管理命令行工具&#xff0c;用于查询域名系统 (DNS) 服务器来获取有关主机名和IP地址的信息。它可以帮助你检查DNS记录、解析域名到IP地址或者执行反向查找&#xff08;从IP地址找到对应的域名&#xff09;。下面是 nslookup 的一些基本用法&#xff1a; 基…...

ES5 vs ES6:JavaScript 演进之路

ES5 vs ES6&#xff1a;JavaScript 演进之路 JavaScript版本演进ES5 (ECMAScript 5)ES6 (ECMAScript 2015)版本演进时间线为什么ES6如此重要&#xff1f; ES5 vs ES61. 变量声明对比2. 函数特性对比3. 类和对象4. 模块化5. 解构和展开6. 字符串和模板字面量7. 数组和对象新方法…...

函数式编程的核心

函数式编程 函数式编程&#xff08;funcitonal programming&#xff09;其实是个很古老的概念。 高阶函数和内存分析 函数式一阶公民 函数式编程最鲜明的特点就是&#xff1a;函数式一等公民&#xff0c;指的是函数与其他数据类型一样&#xff0c;处于平等地位&#xff0c;可…...

【易康eCognition实验教程】006:在影像上添加文本

在某些情况下&#xff0c;希望能在影像上面显示文本文字&#xff0c;例如&#xff0c;一个地图的名称或者是多时相影像分析的年或月的显示。此外&#xff0c;文本如果作为一个规则集导出的部分则可以被纳入数字影像中。如下图所示&#xff1a; 若要添加文本&#xff0c;在影像视…...

Django ORM自定义排序的实用示例

在使用Django进行开发时&#xff0c;ORM&#xff08;对象关系映射&#xff09;是一个非常强大的工具。它让我们可以用Python代码直接操作数据库&#xff0c;而不需要写SQL语句。当我们需要对数据进行排序时&#xff0c;Django ORM同样提供了丰富的功能。今天&#xff0c;我们就…...

【后端】【ubuntu】 ubuntu目录权限查看的几种方法

在Ubuntu中&#xff0c;有多种方式可以查看目录或文件的权限&#xff0c;以下为你详细介绍常见的指令及其使用方法&#xff1a; 1. ls -l 命令 这是最常用的查看文件和目录权限的命令&#xff0c;-l 选项用于以长格式列出文件和目录的详细信息&#xff0c;其中就包含权限信息…...

C++【类和对象】(超详细!!!)

C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时&#xff0c;必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数&#xff0c;名字等于operator加需要使用的运算符&#xff0c;具有返回类型和参数列表及函数…...

如何简单预估大模型运行所需的显存

模型消耗的显存主要来源于模型参数&#xff0c;前向/反向&#xff0c;梯度以及优化器…… 1、为什么显存很重要 显存就是显卡的“仓库”和“高速公路”。 容量越大&#xff0c;能存储的图形数据就越多&#xff0c;就能支持更高分辨率、更高纹理质量的游戏或图形程序。 速度越…...

Excel 中如何实现数据透视表?

Excel 中如何实现数据透视表&#xff1f; 数据透视表&#xff08;PivotTable&#xff09;是 Excel 中强大的数据分析工具&#xff0c;能够快速汇总、分析和展示大量数据。本文将详细介绍如何在 Excel 中创建和使用数据透视表。 1. 数据透视表的基本概念 数据透视表是一种交互…...

C语言中getchar和putchar函数详解,理解多组数据输入的问题中的EOF(-1)

引言 C语言中getchar和putchar函数详解&#xff0c;理解多组数据输入的问题中的EOF&#xff08;-1&#xff09;。 1.getchar() 函数原型&#xff1a; int getchar ( void ); getchar() 函数返回用户从键盘输入的一个字符&#xff0c;使用时不带有任何参数。 程序运行到这个命…...

python基础知识补充

一.区分列表、元组、集合、字典&#xff1a; 二.输出&#xff1a; <1>格式化输出字符串&#xff1a; 格式符号转换%s字符串%d有符号的十进制整数%f浮点数%c字符%u无符号十进制整数%o八进制整数%x十六进制整数&#xff08;小写ox&#xff09;%X十六进制整数(大写OX)%e科…...

MySql自动安装脚本

一、脚本安装流程 1. 添加MySQL的Repository 使用wget命令从MySQL官方网站下载Yum Repository的RPM包。使用rpm -ivh命令安装下载的RPM包&#xff0c;以添加MySQL的Yum Repository。 2. 安装mysql-community-server 使用yum install -y mysql-community-server --nogpgchec…...

STM32-I2C通信外设

目录 一&#xff1a;I2C外设简介 二&#xff1a;I2C外设数据收发 三&#xff1a;I2C的复用端口 四&#xff1a;主机发送和接收 五&#xff1a;硬件I2C读写MPU6050 相关函数&#xff1a; 1.I2C_ GenerateSTART 2.I2C_ GenerateSTOP 3.I2C_ AcknowledgeConfig 4.I2C…...

【脚本】Linux一键扩大虚拟内存的大小

Linux增加虚拟内存其实很简单 就那几个命令&#xff0c;free、mkswap、swapon 但是方便起见我写成了脚本 使用方法 进入你的目录&#xff0c; nano ./install_swap.sh 下面的脚本全文复制&#xff0c;粘贴进去之后&#xff0c;按ctrlx后按y保存 然后运行以下命令 sudo bash …...

信号隔离器 0-20mA/0-10V模拟信号隔离模块变送器 一进二出高精度

信号隔离器 0-20mA/0-10V模拟信号隔离模块变送器 一进二出高精度https://item.taobao.com/item.htm?ftt&id766022047828 型号 一进二出 0-20mA 转0-20mA/0-10V MS-C12 一进二出 0-10V 转 0-20mA/0-10V MS-V12 信号隔离器 单组输出 MS-C1/V1 双组输出 MS-C12/V12 用于…...

Nat. Methods | scPerturb——单细胞扰动数据的标准化资源与统计分析方法

《Nature Methods》提出scPerturb资源平台&#xff0c;整合44个单细胞扰动数据集&#xff08;涵盖转录组、表观组、蛋白组读值&#xff09;&#xff0c;并通过能量统计量&#xff08;E-statistics&#xff09;量化扰动效应&#xff0c;旨在解决单细胞扰动数据的互操作性差、缺乏…...

【易康eCognition实验教程】005:影像波段组合显示与单波段显示

文章目录 一、加载多波段影像二、单波段显示三、彩色显示一、加载多波段影像 二、单波段显示 如果导入的影像数据具有三个或者更多的波段,影像场景将自动以RGB(红绿蓝)模式默认显示,如上图所示。在视图设置(View Settings)窗口中使用单波段灰度显示(Single LayuerGrays…...

使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题

目录 1、问题说明 2、使用Process Explorer查看目标dll动态库有没有动态加载起来 3、使用Dependency Walker查看xxpadll.dll库的库依赖关系&#xff0c;找到xxpadll.dll加载失败的原因 4、使用PE信息查看工具查看目标dll库的时间戳 5、关于xxsipstack2.dll中调用xxdatanet…...

Git的命令学习——适用小白版

浅要了解一下Git是什么&#xff1a; Git是目前世界上最先进的的分布式控制系统。Git 和其他版本控制系统的主要差别在于&#xff0c;Git 只关心文件数据的整体是否发生变化&#xff0c;而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上…...

如何安全处置旧设备?

每年&#xff0c;数百万台旧设备因老化、故障或被新产品取代而被丢弃&#xff0c;这些设备上存储的数据可能带来安全风险。 如果设备没有被正确删除数据&#xff0c;这些数据往往仍可被恢复。因此&#xff0c;安全处置旧设备至关重要。 旧设备可能包含的敏感数据 旧设备中可能…...

Java 学习记录:基础到进阶之路(一)

今天&#xff0c;让我们深入到 Java 项目构建、基础语法及核心编程概念的领域&#xff0c;一探究竟。 软件安装及环境配置请查看之前更新的博客有着详细的介绍&#xff1a; IDEA软件安装&环境配置&中文插件-CSDN博客 目录 1.Java 项目构建基础 1.项目中的 SRC 目录…...

3.3-3.9 蓝桥杯备赛周记

斜率关系 14届省赛 ![[Pasted image 20250205145241.png]] NE555频率解算温度 频率范围外 无效 unsigned int Freq; if(Freq<200) {humnity0;} else if(Freq>2000) {humnity0;} else{ humnity80.0/1800.0 *(float)(Freq-200)10.0;} 斜率计算题 需要类型转换 和数据需要…...

系统架构设计师—系统架构设计篇—软件架构风格

文章目录 概述经典体系结构风格数据流风格批处理管道过滤器对比 调用/返回风格主程序/子程序面向对象架构风格层次架构风格 独立构件风格进程通信事件驱动的系统 虚拟机风格解释器基于规则的系统 仓库风格&#xff08;数据共享风格&#xff09;数据库系统黑板系统超文本系统 闭…...

工厂模式加策略模式 -- 具体实现

这里写目录标题 定义接口定义抽象类定义主处理器分支处理器定义工厂demo 定义接口 public interface EntityHandler extends InitializingBean {MatchContentDTO match(MatchEntityDTO matchEntityDTO);String supportEntityType(); }定义抽象类 public abstract class Abstr…...