【雕爷学编程】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

相关文章

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念