"""
******************************************************************************
* @file main.py
* @author
* @version V1.0
* @date 2023-12-01
* @brief DS18B20实验
******************************************************************************
*
* 实验目的:读取DS18B20传感器的温度值
*
* 硬件资源及引脚分配:
* 1, LED --> ESP32S3 IO
* LED --> IO1
* 2, XL9555 --> ESP32S3 IO
* SCL --> IO42
* SDA --> IO41
* 3, SPI_LCD --> ESP32S3 IO / XL9555
* CS --> IO21
* SCK --> IO12
* SDA --> IO11
* DC --> IO40(跳线帽连接)
* PWR --> XL9555_P13
* RST --> XL9555_P12
* 4, DS18B20 --> ESP32S3 IO
* DQ --> IO0(跳线帽连接)
*
* 实验现象
* 1, 程序下载成功后,LCD显示屏实时更新温度值。
* 2, LED闪烁,提示程序运行。
*
* 注意事项
* 无
*
* 定制开发,技术V:349014857
* 更多例程:https://iot666.blog.csdn.net/
* 开发咨询:http://doc.yotill.com
"""
from machine import Pin,SPI,I2C
import onewire, ds18x20
import atk_xl9555 as io_ex
import atk_lcd as lcd
import time
"""
* @brief 程序入口
* @param 无
* @retval 无
"""
if __name__ == '__main__':
# 初始化LED并输出高电平
led = Pin(1,Pin.OUT,value = 1)
# IIC初始化
i2c0 = I2C(0, scl = Pin(42), sda = Pin(41), freq = 400000)
# XL9555初始化
xl9555 = io_ex.init(i2c0)
# 复位LCD
xl9555.write_bit(io_ex.SLCD_RST,0)
time.sleep_ms(100)
xl9555.write_bit(io_ex.SLCD_RST,1)
time.sleep_ms(100)
# 初始化SPI
spi = SPI(2,baudrate = 80000000, sck = Pin(12), mosi = Pin(11), miso = Pin(13))
# 初始化LCD,lcd = 0为####2.4寸屏幕;lcd = 1为####1.3寸SPILCD屏幕;
display = lcd.init(spi,dc = Pin(40,Pin.OUT,Pin.PULL_UP,value = 1),cs = Pin(21,Pin.OUT,Pin.PULL_UP,value = 1),dir = 1,lcd = 0)
# 开启背光
xl9555.write_bit(io_ex.SLCD_PWR,1)
time.sleep_ms(100)
# 提示实验信息
display.string(30, 50, 240, 32, 32, "ESP32-S3",lcd.RED)
display.string(30, 80, 240, 24, 24, "DS18B20 TEST",lcd.RED)
display.string(30, 110, 240, 16, 16, "ATOM@ALIENTEK",lcd.RED)
display.string(30, 130, 200, 16, 16, "TEMPERATE: 00.00C", lcd.BLUE)
# 初始化DS18B20
ds_18b20 = ds18x20.DS18X20(onewire.OneWire(Pin(0)))
"""
* @brief 读取ds18x20温度值
* @param 无
* @retval 无
"""
def read_sensor():
# 发现设备
roms = ds_18b20.scan()
# 获取数值
ds_18b20.convert_temp()
for rom in roms:
temp = ds_18b20.read_temp(rom)
if isinstance(temp, float):
temp = round(temp, 2)
return temp
while True:
# 打印温度值
umber = float(read_sensor())
display.num(30 + 11 * 8,130,int(umber),2,16,lcd.RED)
display.num(30 + 14 * 8,130,int(umber * 100 % 100),2,16,lcd.RED)
led_state = led.value()
led.value(not led_state)
time.sleep(1)
边缘计算网关定制开发
- 粉丝: 3299
- 资源: 1231
最新资源
- VB+ACCESS宾馆客房管理系统(系统+论文+封面)(2024y3).7z
- VB+access成绩分析统计系统(论文+源代码)(2024tz).7z
- vb+access大气污染模型(系统+翻译+论文+开题)(2024wa).7z
- vb+access抽奖系统(系统+论文+开题报告+外文翻译+封面+中英摘要+任务书+中期检查表)(2024ou).7z
- VB+ACCESS大型机房学生上机管理系统(源代码+系统)(2024n5).7z
- VB+ACCESSVCD租借管理系统(系统+论文+需要分析)(20248q).7z
- php学籍管理系统pc-毕业设计(2024bt).7z
- wangfang1.pdf
- wangfang.pdf
- 《Qt5开发实战》书+源码.zip
- 数学计算中的平方表与圆周率π的应用
- 圣诞树网页的HTML与CSS代码实例
- Java商城-商城演示和商城项目
- 改进的大规模语音合成模型CosyVoice 2: 统一流式与非流式合成
- 全平台数据库管理工具MySQL
- 开源源码分享动态圣诞树
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈