Python 在嵌入式系统编程中的应用虽然不如 C 或 C++ 那么广泛,但近年来随着 MicroPython 等项目的兴起,Python 已经成为了一种可行的选择,尤其是在那些对性能要求不是非常高的场景中。以下是 Python 嵌入式系统编程的 9 个基础知识点,每个知识点都附有详细的代码讲解。

CSDN大礼包:《2025年最新全套学习资料包》免费分享
在这里插入图片描述

1. 基本输入输出(GPIO)

GPIO(通用输入输出)是嵌入式系统中最基本的功能之一。以下是如何在 MicroPython 中控制 GPIO 的示例。

from machine import Pin

# 设置引脚模式为输出
led = Pin(2, Pin.OUT)

# 点亮 LED
led.value(1)

# 熄灭 LED
led.value(0)

2. 串口通信(UART)

串口通信是嵌入式系统中常用的通信方式之一。

from machine import UART

# 初始化 UART
uart = UART(1, baudrate=9600, tx=17, rx=16)

# 发送数据
uart.write('Hello, UART!')

# 接收数据
data = uart.read(10)  # 读取最多10个字节
print(data)

3. 定时器和中断

定时器和中断是嵌入式系统中处理时间相关任务的关键。

from machine import Timer
import time

# 定义一个回调函数
def timer_callback(timer):
    print("Timer triggered!")

# 初始化定时器,1秒后触发
tim = Timer()
tim.init(freq=1, mode=Timer.ONE_SHOT, callback=timer_callback)

# 保持程序运行,等待中断
while True:
    time.sleep(1)

4. 模拟输入(ADC)

模拟输入(ADC)用于读取模拟信号。

from machine import ADC, Pin

# 初始化 ADC
adc = ADC(Pin(34))

# 读取模拟值
value = adc.read_u16()  # 读取16位无符号整数
print(value)

5. PWM(脉冲宽度调制)

PWM 用于生成模拟信号,通常用于控制电机速度或 LED 亮度。

from machine import Pin, PWM

# 初始化 PWM
pwm = PWM(Pin(25))
pwm.freq(1000)  # 设置频率为1kHz
pwm.duty(512)   # 设置占空比为50%

# 调整占空比
pwm.duty(256)   # 25% 占空比
pwm.duty(768)   # 75% 占空比

6. I2C 通信

I2C 是一种常用的串行通信协议。

from machine import I2C, Pin

# 初始化 I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)

# 读取传感器数据(假设传感器地址为0x48)
sensor_addr = 0x48
data = i2c.readfrom(sensor_addr, 2)  # 读取2个字节
print(data)

7. SPI 通信

SPI 是一种高速的全双工通信协议。

from machine import SPI, Pin

# 初始化 SPI
spi = SPI(0, baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))

# 发送数据并接收响应
data_to_send = b'\x01\x02\x03'
response = spi.write_readinto(data_to_send, bytearray(3))
print(response)

8. 文件系统操作

嵌入式系统中经常需要读写文件。

# 打开文件并写入数据
with open("data.txt", "w") as file:
    file.write("Hello, file system!")

# 读取文件内容
with open("data.txt", "r") as file:
    content = file.read()
    print(content)

9. 网络通信(Socket)

对于支持网络功能的嵌入式设备,网络通信是不可或缺的。

import usocket as socket

# 创建一个 TCP 客户端
addr = socket.getaddrinfo('example.com', 80)[0][-1]
s = socket.socket()
s.connect(addr)

# 发送 HTTP 请求
s.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')

# 接收响应
response = b''
while True:
    data = s.recv(100)
    if not data:
        break
    response += data

# 打印响应
print(response.decode('utf-8'))

# 关闭连接
s.close()

这些示例展示了如何在嵌入式系统中使用 Python 来进行基本的硬件控制和通信。MicroPython 等项目使得 Python 在嵌入式编程中更加实用和便捷。根据具体的硬件平台和需求,这些代码可能需要适当调整。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐