本文主要是介绍【雕爷学编程】MicroPython手册之 ESP32 特定端口库 esp32.raw_temperature(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。
MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。
MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。
使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。
总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
MicroPython的esp是指针对ESP8266和ESP32芯片的MicroPython固件和相关软件库。ESP8266和ESP32是一类广泛应用于物联网和嵌入式系统的低成本、低功耗的Wi-Fi和蓝牙模块。MicroPython的esp为这两种芯片提供了高级的脚本编程环境,使开发者能够使用Python语言进行快速原型设计和开发。
ESP8266:是一款低成本、低功耗的Wi-Fi模块/芯片,由Espressif Systems开发。它内置了TCP/IP协议栈,可以用于连接互联网,并具备较强的处理能力。MicroPython的esp提供了针对ESP8266的固件和相关软件库,使开发者可以使用MicroPython语言进行ESP8266应用的开发。
ESP32:是Espressif Systems推出的一款高度集成的Wi-Fi和蓝牙模块/芯片,与ESP8266相比,它具备更强大的处理能力、更多的外设接口和更多的内存。MicroPython的esp也提供了针对ESP32的固件和相关软件库,使开发者可以使用MicroPython语言进行ESP32应用的开发。
MicroPython的esp固件:是专门针对ESP8266和ESP32芯片的MicroPython固件版本。这些固件经过了针对性的优化,使得它们可以在ESP8266和ESP32上运行,并提供了与硬件交互、网络通信和外设控制等功能的API。
软件库:MicroPython的esp还提供了一系列与ESP8266和ESP32硬件相关的软件库,用于简化和加速开发过程。这些软件库提供了丰富的功能接口,涵盖了Wi-Fi、蓝牙、GPIO(通用输入输出)、I2C、SPI、PWM等常用的硬件和通信协议,使开发者可以方便地访问和控制硬件资源。
MicroPython 的 esp32.raw_temperature() 是一个用于读取 ESP32 内部温度传感器的原始值的函数。该函数返回一个整数,表示温度传感器的输出电压,单位为毫伏。该函数不需要任何参数。
MicroPython 的 esp32.raw_temperature() 的主要特点有:
可以实现 ESP32 无需外部温度传感器,就可以测量自身的芯片温度,从而监控芯片的工作状态和散热情况。
可以根据不同的应用场景,将原始值转换为开尔文、摄氏或华氏温度,并进行温度控制或显示。
可以与其他模块或功能结合使用,实现多种温度相关的应用。
MicroPython 的 esp32.raw_temperature() 的应用场景有:
案例1:温度显示:利用 ESP32 开发板、OLED 显示屏等组件,利用 MicroPython 的 esp32.raw_temperature() 函数来实现一个温度显示,可以在 OLED 显示屏上显示 ESP32 芯片的温度,并根据用户的选择来切换不同的温度单位。以下是部分代码示例::
# 导入 esp32 模块
import esp32
# 导入 OLED 模块
import ssd1306
# 导入按键模块
from machine import Pin# 定义 OLED 引脚号和尺寸
OLED_SCL_PIN = 22
OLED_SDA_PIN = 21
OLED_WIDTH = 128
OLED_HEIGHT = 64# 定义按键引脚号和状态
KEY_PIN = 4
KEY_ON = 0
KEY_OFF = 1# 创建 OLED 对象并初始化
oled = ssd1306.SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, machine.I2C(scl=machine.Pin(OLED_SCL_PIN), sda=machine.Pin(OLED_SDA_PIN)))
oled.fill(0)
oled.text("Temperature Display", 0 ,0)
oled.show()# 创建按键对象并初始化,设置为上拉输入模式,并注册中断回调函数,触发方式为下降沿(按下)
key = Pin(KEY_PIN, Pin.IN, Pin.PULL_UP)
key.irq(lambda pin: change_unit(), trigger=Pin.IRQ_FALLING)# 定义一个全局变量,用于存储当前的温度单位,初始值为摄氏度(C)
unit = "C"# 定义一个函数,用于读取 ESP32 内部温度传感器的原始值,并转换为不同的温度单位
def read_temp():global unit# 调用 esp32.raw_temperature() 函数,获取原始值(单位为毫伏)raw = esp32.raw_temperature()# 根据当前的温度单位,将原始值转换为对应的温度值(单位为开尔文、摄氏或华氏)if unit == "K":# 原始值除以 10 得到开尔文温度(单位为 K)temp = raw / 10elif unit == "C":# 原始值除以 10 减去 273.15 得到摄氏温度(单位为 C)temp = raw / 10 - 273.15elif unit == "F":# 原始值除以 10 减去 273.15 再乘以 1.8 加上 32 得到华氏温度(单位为 F)temp = (raw / 10 - 273.15) * 1.8 + 32else:return None# 返回转换后的温度值和单位字符串return "{:.2f} {}".format(temp, unit)# 定义一个函数,用于在 OLED 上显示 ESP32 芯片的温度,并根据用户的选择来切换不同的温度单位
def show_temp():# 调用 read_temp 函数,获取温度值和单位字符串temp_str = read_temp()# 在 OLED 上显示温度字符串oled.fill(0)oled.text("Temperature Display", 0 ,0)oled.text(temp_str, 32 ,16)oled.show()# 定义一个函数,用于切换温度单位,并重新显示温度
def change_unit():global unit# 根据当前的温度单位,切换到下一个温度单位(K -> C -> F -> K)if unit == "K":unit = "C"elif unit == "C":unit = "F"elif unit == "F":unit = "K"else:return# 调用 show_temp 函数,重新显示温度show_temp()# 定义一个循环,用于调用 show_temp 函数,并延迟一秒钟
while True:show_temp()time.sleep(1)
案例2:温度控制:利用 ESP32 开发板、风扇等组件,利用 MicroPython 的 esp32.raw_temperature() 函数来实现一个温度控制,可以根据 ESP32 芯片的温度来控制风扇的转速,从而实现芯片的散热。以下是部分代码示例::
# 导入 esp32 模块
import esp32
# 导入风扇模块
from machine import PWM# 定义风扇引脚号和频率
FAN_PIN = 5
FAN_FREQ = 1000# 创建风扇对象并初始化,设置为 PWM(脉冲宽度调制)输出模式,并设置频率和占空比
fan = PWM(Pin(FAN_PIN))
fan.freq(FAN_FREQ)
fan.duty(0)# 定义一个函数,用于根据 ESP32 芯片的温度来控制风扇的转速
def fan_control():# 调用 esp32.raw_temperature() 函数,获取原始值(单位为毫伏)raw = esp32.raw_temperature()# 将原始值除以 10 得到开尔文温度(单位为 K)temp = raw / 10# 根据开尔文温度的大小,设置不同的风扇占空比(越高越快)if temp < 300:# 如果温度低于 300 K,则设置占空比为零(关闭风扇)fan.duty(0)elif temp < 310:# 如果温度在 300-310 K 之间,则设置占空比为 256(低速)fan.duty(256)elif temp < 320:# 如果温度在 310-320 K 之间,则设置占空比为 512(中速)fan.duty(512)else:# 如果温度高于 320 K,则设置占空比为 1023(高速)fan.duty(1023)# 定义一个循环,用于调用 fan_control 函数,并延迟一秒钟
while True:fan_control()time.sleep(1)
案例3:温度记录:利用 ESP32 开发板、SD 卡等组件,利用 MicroPython 的 esp32.raw_temperature() 函数来实现一个温度记录,可以定期读取 ESP32 芯片的温度,并将其保存到 SD 卡中的文本文件中,从而实现芯片的温度历史记录。以下是部分代码示例:
# 导入 esp32 模块
import esp32
# 导入 SD 卡模块
import sdcard
# 导入 os 模块
import os# 定义 SD 卡引脚号和文件名
SD_CS_PIN = 15 # 片选引脚号
SD_SCK_PIN = 14 # 时钟引脚号
SD_MOSI_PIN = 13 # 主机输出从机输入引脚号
SD_MISO_PIN = 12 # 主机输入从机输出引脚号
FILE_NAME = "temp.txt" # 文件名# 创建 SD 卡对象并初始化,设置为 SPI 模式,并挂载到 /sd 目录下
sd = sdcard.SDCard(machine.SPI(1, sck=machine.Pin(SD_SCK_PIN), mosi=machine.Pin(SD_MOSI_PIN), miso=machine.Pin(SD_MISO_PIN)), machine.Pin(SD_CS_PIN))
os.mount(sd, "/sd")# 定义一个函数,用于读取 ESP32 内部温度传感器的原始值,并转换为摄氏温度
def read_temp():# 调用 esp32.raw_temperature() 函数,获取原始值(单位为毫伏)raw = esp32.raw_temperature()# 将原始值除以 10 减去 273.15 得到摄氏温度(单位为 C)temp = raw / 10 - 273.15# 返回摄氏温度值return temp# 定义一个函数,用于将 ESP32 芯片的温度保存到 SD 卡中的文本文件中,并附加时间戳
def save_temp():# 调用 read_temp 函数,获取摄氏温度值temp = read_temp()# 调用 time.localtime 函数,获取当前的时间元组(年,月,日,时,分,秒)t = time.localtime()# 将时间元组转换为字符串格式(年-月-日 时:分:秒)t_str = "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(*t)# 将温度值和时间字符串拼接成一行数据,并在末尾加上换行符(\n)data = "{:.2f} C, {}\n".format(temp, t_str)# 打开 SD 卡中的文本文件,以追加模式(a)写入数据,并关闭文件f = open("/sd/" + FILE_NAME, "a")f.write(data)f.close()# 定义一个循环,用于每隔一分钟调用 save_temp 函数,并进入浅睡眠模式,等待下一次唤醒
while True:save_temp()machine.sleep(60000) # 睡眠一分钟(60000 毫秒)
案例4:获取温度值
import esp32temp = esp32.raw_temperature()
print(temp)
直接打印出温度读数。
案例5:温度监控
import esp32, timewhile True:temp = esp32.raw_temperature()if temp > 30:print('Temperature too high!')time.sleep(60)
周期性检查温度,并在温度过高时报警。
案例6:温度补:
import esp32def compensate(raw):return raw / 0.01 + 25 temp = compensate(esp32.raw_temperature())
print(temp)
通过辐射得到的原始温度读数进行转换,得到补偿后的温度。
这些例子展示了如何获取ESP32内置温度传感器的原始温度值,并进行处理。
这篇关于【雕爷学编程】MicroPython手册之 ESP32 特定端口库 esp32.raw_temperature()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!