【雕爷学编程】MicroPython手册之 ESP32 特定端口库 esp32.raw_temperature()

本文主要是介绍【雕爷学编程】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()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329595

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND