嵌入式实训day6

1、

from machine import Pin
from neopixel import NeoPixel
import time


if __name__=="__main__"
    #创建RBG灯带控制对象,包含5个像素(5个RGB LED)
    rgb_led = NeoPixel(Pin(4,Pin.OUT),5)
    #定义RGB颜色
    RED=(255,0,0)
    GREEN(0,255,0)
    BLUE =(0,0,255)
    YELLOW=(255,150,0)
    WHITE=(255,255,255)# 白色
    BLACK=(0,0,0)#黑色(不亮)
    COLORS =(RED,GREEN,BLUE,YELLOW,WHITE,BLACK)
    
    for color in COLORS:#逐一点亮每个RGB LED
        for i in range(5):
            rgb_led[i]=(color[0], color[1], color[2])
            rgb_led.write()
            time.sleep_ms(200)
        time.sleep_ms(300)

2、

from machine import Pin
import time
import tm1637
if __name__=="__main__":
    # 定义数码管控制对象
    display =tm1637.TM1637(clk=Pin(16),dio=Pin(17))
    
    # 显示小数
    display.numbers(13,14)# 13.14
    time.sleep(2)
    
    #显示十六进制
    display.hex(100)#0x64
    time.sleep(2)
    
    #亮度调节
    display.brightness(0)
    time.sleep(2)
    display.brightness(7)
    time.sleep(2)
    
    #显示温度值
    display.temperature(26)
    time.sleep(2)
    display.temperature(-10)#低温报警:Lo
    time.sleep(2)
    display.temperature(100)#高温报警:Hi
    time.sleep(2)
    
    #显示字符串
    display.show("ABCD")
    time.sleep(2)
    
    #字符串滚动显示
    display.scroll("18712345678",500)
    
    #倒计时10秒
    num = 10
    while num >=0:
        display.number(num)
        num -= 1
        time.sleep(1)
    
    
    
    

3、

import ds18x20
import onewire
from machine import Pin
from machine import Timer
import sys


#创建单总线驱动对象
ow= onewire.OneWire(Pin(4))
#定义DS18B20控制对象
ds18b20=ds18x20.DS18X20(ow)
#扫描设备,获取64位序列码,返回结果保存列表中
roms =ds18b20.scan()
if not roms:
    print("没有扫描到DS18B20设备,请检查硬件连接!")
    sys.exit()
else:
    print("扫描到DS18B20设备,序列码是:",roms)
    
#定时器回调函数#
def get_temp(timer0):
    ds18b20.convert_temp()
    for rom in roms:
        temp= ds18b20.read_temp(rom)
        print("Ds18B20的温度是:%.2f℃"% temp)
        
        
if __name__=="__main__":
    timer0 =Timer(0)
    timer0.init(mode=Timer.PERIODIC, period=1000,callback=get_temp)
    while True:
        pass
    

4、

from machine import Pin
import network
import time


led1=Pin(15,Pin.OUT,value=1)

#准备手机热点
ssid="yishen"
password="20020618"

def wifi_connect():
    #创建WLAN对象,STA模式
    wlan=network.WLAN(network.STA_IF)
    #激活WIFI模块
    wlan.active(True)
    #记录当前的时间用于WIFI连接的超时判定
    start_time=time.time()
    if not wlan.isconnected():
        #准备建立连接
        print(wlan.scan())
        wlan.connect(ssid,password)
        #等待连接让LED闪烁
        while not wlan.isconnected():
            led1.value(not led1.value())
            time.sleep_ms(300)
            #判定超时
            if time.time()-start_time>30:
                print("WIFI连接超时")
                return False
            
        
    else:
        #已经连接成功
        led1.value(0)
        print("网络配置信息",wlan.ifconfig())
        return True
    
    
if __name__=="__main__":
    wifi_connect()
    
    

5、

"""
通过socket编程实现一个简易的HTTP服务器
使用手机可以连接到服务器帮控制LED开关
测试:在手机的浏览器输入开发板的IP地址
"""
from machine import Pin
import network
import time
import socket
import sys

# 定义LED控制对象,作为连接WIFI指示灯
led1 = Pin(15, Pin.OUT, value=1)

# 准备手机热点
ssid = "yishen"
password = "20020618"

def wifi_connect():
    # 创建WLAN对象,STA模式(ESP32开发板连接手机热点-AP)
    wlan = network.WLAN(network.STA_IF)
    # 激活WIFI模块
    wlan.active(True)
    # 记录当前时间,用于WIFI连接的超时判定
    start_time = time.time()
    
    if not wlan.isconnected():
        # 准备建立连接
        # print(wlan.scan())
        print("开始连接WIFI...")
        wlan.connect(ssid, password)
        # 等待连接让LED1闪烁
        while not wlan.isconnected():
            led1.value(not led1.value())
            time.sleep_ms(300)
            # 超时判定
            if time.time() - start_time > 30:
                print("WIFI连接超时!")
                return False
        
    else:
        # 已经连接成功(如果之前连接过WIFI,上电后会自动连接)
        led1.value(0)
        print("网络配置信息", wlan.ifconfig()) # 重点关注IP地址
        return True
  
# 网页数据
def web_page():
    # 获取开关灯的状态
    if led1.value() == 0:
        led_state = " "
    else:
        led_state = "checked"
    html = \
"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTTP</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            font-family: Arial;
            text-align: center;
            margin: 0px auto;
            padding-top: 30px;
        }

        .switch {
            position: relative;
            display: inline-block;
            width: 120px;
            height: 68px
        }

        .switch input {
            display: none
        }

        .slider {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-color: #ccc;
            border-radius: 34px
        }

        .slider:before {
            position: absolute;
            content: "";
            height: 52px;
            width: 52px;
            left: 8px;
            bottom: 8px;
            background-color: #fff;
            -webkit-transition: .4s;
            transition: .4s;
            border-radius: 68px
        }

        input:checked+.slider {
            background-color: #2196F3
        }

        input:checked+.slider:before {
            -webkit-transform: translateX(52px);
            -ms-transform: translateX(52px);
            transform: translateX(52px)
        }
    </style>
    <script>
        function toggleCheckbox(element) {
            var xhr = new XMLHttpRequest();
            if (element.checked) {
                xhr.open("GET", "/?led1=on", true);
            }
            else {
                xhr.open("GET", "/?led1=off", true);
            }
            xhr.send();
        }
    </script>
</head>

<body>
    <h1>ESP32 LED</h1>
    <label class="switch">
        <input type="checkbox" onchange="toggleCheckbox(this)" %s>
        <span class="slider"></span>
    </label>
</body>

</html>
""" % (led_state)
    return html    

  
if __name__ == "__main__":
    # 连接WiFi
    while True:
        try:
            if wifi_connect():
                break
        except Exception as ex:
            print("WIFI连接异常:", ex)
            time.sleep_ms(1000)
            
    print("WIFI连接成功!")
    
    try:
        # 创建HTTP通信的套接字(本质就是TCP通信)
        http_socket = socket.socket()
        # 设置地址重用选项
        http_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        # 绑定地址
        http_socket.bind(("0.0.0.0", 80))
        
        # 设置监听
        http_socket.listen()
        print("创建HTTP服务器成功")
    except Exception as ex:
        print("创建HTTP服务器失败:", ex)
        sys.exit()
    
    # 服务器一直运行
    while True:
        try:
            # 等待客户端连接,返回两个数据,分别是和客户端通信的套接字、客户端地址
            client, addr = http_socket.accept()
            print("客户端%s建立了连接" % str(addr))
            
            # 接收客户端请求数据
            request = client.recv(1024)
            request = str(request)
            print("收到客户端请求=%s" % request)
            
            # GET /?led1=off HTTP/1.1......
            # GET /?led1=on HTTP/1.1......
            if request.find("/?led1=on") == 6:
                led1.value(1)
            elif request.find("/?led1=off") == 6:
                led1.value(0)
            
            # 发送响应:给客户端返回数据
            client.send("HTTP/1.1 200 OK\n")  # 状态行
            client.send("Content-Type: text/html\n")  # 响应头
            client.send("Connection: close\n\n") # 响应头
            
            response = web_page() # 响应消息体
            client.write(response)  # 发送响应消息
            client.close() # 关闭本次通信

        except Exception as ex:
            print("HTTP通信异常:", ex)
            
    

6、

from machine import Pin
import network
import time
import socket
import onewire
import ds18x20

#创建单总线驱动对象
ow= onewire.OneWire(Pin(4))
#定义DS18B20控制对象
ds18b20=ds18x20.DS18X20(ow)
#扫描设备,获取64位序列码,返回结果保存列表中

# 初始化LED对象
led1 = Pin(15, Pin.OUT, value=1)

roms =ds18b20.scan()

#定时器回调函数#
def get_temp(timer0):
    ds18b20.convert_temp()
    for rom in roms:
        temp= ds18b20.read_temp(rom)
        print("Ds18B20的温度是:%.2f℃"% temp)
        
    
# 准备手机热点
ssid = "yishen"
password = "20020618"

def wifi_connect(ssid, password):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    start_time = time.time()

    if not wlan.isconnected():
        print("连接到WiFi...")
        wlan.connect(ssid, password)
        while not wlan.isconnected():
            pass
    print("网络配置信息:", wlan.ifconfig())
    return wlan

# 准备网页数据
def web_page(temp):
    html = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>DS18B20</title>
    <style>
        html {
            font-family: Arial;
            display: inline-block;
            margin: 0px auto;
            text-align: center;
        }
        h2 {
            font-size: 3.0rem;
        }
        p {
            font-size: 3.0rem;
        }
        .units {
            font-size: 1.2rem;
        }
        .ds-labels {
            font-size: 1.5rem;
            vertical-align: middle;
            padding-bottom: 15px;
        }
    </style>
</head>
<body>
    <h2>ESP32</h2>
    <p><i class="fas fa-thermometer-half" style="color:#059e8a;"></i>
        <span class="ds-labels">Temperature</span>
        <span id="temperature">""" + "%0.1f" % temp + """</span>
        <sup class="units">&deg;C</sup>
    </p>
    <p><i class="fas fa-thermometer-half" style="color:#059e8a;"></i>
        <span class="ds-labels">Temperature</span>
        <span id="temperature">""" + str(round(temp * (9 / 5) + 32.0, 1)) + """</span>
        <sup class="units">&deg;F</sup>
    </p>
</body>
</html>
"""
    return html

if __name__ == '__main__':
    # 初始化WiFi连接
    wlan = wifi_connect(ssid, password)
    
    try:
        # 创建TCP套接字并绑定地址
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        s.bind(('0.0.0.0', 80))
        s.listen(5)
        print('HTTP服务器已启动.')
        
        while True:
            conn, addr = s.accept()
            print('客户端地址:', addr)
            
            request_data = conn.recv(1024)
            request_data = str(request_data)
            print('收到请求:', request_data)
            
            # 获取DS18B20传感器数据
            get_temp(None)  # 此处传入None,因为定时器回调函数不需要参数
            
            # 读取最新得到的温度数据
            temp = ds18b20.read_temp(roms[0])  # 假定只有一个DS18B20设备
            
            # 准备并发送网页响应
            response = web_page(temp)
            conn.send(b'HTTP/1.1 200 OK\n')
            conn.send(b'Content-Type: text/html\n')
            conn.send(b'Connection: close\n\n')
            conn.sendall(response)
            
            conn.close()
    except Exception as ex:
        print("HTTP服务器异常:", ex)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/720166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SOLIDWORKS 2024正版软件:新增功能介绍

随着科技的飞速发展&#xff0c;计算机辅助设计&#xff08;CAD&#xff09;软件在工业设计领域扮演着越来越重要的角色。SOLIDWORKS作为3D CAD软件提供商&#xff0c;其每一次版本更新都带来了一系列创新功能和改进&#xff0c;旨在为用户提供更有效、更智能、更协同的设计体验…

传输层udp和tcp协议格式

UDP协议 UDP协议端格式 udp的前八个字节是报头&#xff0c;后面部分就是有效载荷。而目的端口号就保证了udp向应用层交付的问题。 而针对于报头和有效载荷分离是根据固定八字结的报头长度。数据的长度就是取决于报头中udp长度字段的大小来确定udp报文长度&#xff0c;因此也可…

006 spring事务支持

文章目录 事务回顾事务介绍事务并发问题(隔离性导致)事务隔离级别 Spring框架事务管理相关接口Spring框架事务管理的分类编程式事务管理(了解)声明式事务管理(重点) 事务管理之XML方式业务层持久层单元测试代码配置事务管理的AOP 事务管理之混合方式事务管理之基于AspectJ的纯注…

【分布式事务】分布式事务其他解决方案——2PC

目录 2PC解释例子分析回到IT系统中 XA 方案执行流程DTP 模型交互模式 总结 2PC 解释 2PC 即两阶段提交协议&#xff0c;是将整个事务流程分为两个阶段&#xff0c;准备阶段&#xff08;Prepare phase&#xff09;、提交阶段&#xff08;commit phase&#xff09;&#xff0c;…

PyMuPDF 操作手册 - 01 从PDF中提取文本

文章目录 一、打开文件二、从 PDF 中提取文本2.1 文本基础操作2.2 文本进阶操作2.2.1 从任何文档中提取文本2.2.2 如何将文本提取为 Markdown2.2.3 如何从页面中提取键值对2.2.4 如何从矩形中提取文本2.2.5 如何以自然阅读顺序提取文本2.2.6 如何从文档中提取表格内容2.2.6.1 提…

经典sql

一、连续登录问题 问题&#xff1a;1&#xff09;、每个用户连续登录最大天数 2&#xff09;、连续登录大于三天的用户数 分析&#xff1a;本质都是计算用户连续登录天数 方案一&#xff1a;利用排序窗口 select a.user_id,a.date_rslt,count(1) as cnt from (select t.…

定个小目标之刷LeetCode热题(22)

这道题最容易想的就是排序后再遍历&#xff0c;但是时间复杂度就不是O(n)了&#xff0c;所以还是得用更优的解法&#xff0c;直接看题解&#xff0c;它是使用了HashSet&#xff0c;遍历数组&#xff0c;对于每一个数x&#xff0c;如果不存在x - 1则进入内循环&#xff0c;否则跳…

java智慧工地系统源码 智慧工地标准之一:环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能?

java智慧工地系统源码 智慧工地标准之一&#xff1a;环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能&#xff1f; 智慧工地环境监测系统是一套集成了物联网、大数据和云计算技术的系统&#xff0c;主要用于实时监测和管理建筑工地的环境状况。以下是该系统的一些核…

金融科技行业的融资趋势、投资者关注及未来预测

一、金融科技行业的融资趋势 金融科技行业的融资趋势近年来展现出强劲的增长势头&#xff0c;具体表现在以下几个方面&#xff1a; 融资规模持续扩大&#xff1a; 根据《全球金融科技投融资趋势报告(2023年上半年)》&#xff0c;2023年上半年全球金融科技行业投融资事件总次数…

语言大模型:开启自然语言处理的新篇章

随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域取得了显著的成果。其中&#xff0c;语言大模型&#xff08;Language Models&#xff09;作为近年来崛起的一种新型神经网络模型&#xff0c;已经在文本生成、机器翻译、情感分析等多个NLP任…

Vue02-第一个Vue程序

第一个Vue程序 1、什么是MVVM MVVM&#xff08;Model-View-ViewModel&#xff09;是一种软件设计模式&#xff0c;由微软WPF&#xff08;用于替代WinForm&#xff0c;以前就是用这个技术开发桌面应用程序的&#xff09;和Silverlight&#xff08;类似于Java Applet&#xff0…

基于Java的冬奥会科普平台

开头语&#xff1a;你好&#xff0c;我是计算机学姐码农小野。如果你对冬奥会科普平台感兴趣或有其他技术需求&#xff0c;欢迎随时私信我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java、B/S架构 工具&#xff1a;MyEclipse、MySQL 系统展示…

ANSYS导入图片建模教程

将一张PNG或JPG格式的图片导入到ANSYS内&#xff0c;根据图片内容生成几何模型可通过下面的思路来实现。 首先选取一张需要导入的图片文件。这里采用随机成长算法生成了一张多孔结构图片&#xff0c;图片样式及绘图参数如下。 利用CAD图像导入插件将图片处理成AutoCAD文件&a…

Zygote进程的理解

Zygote进程是安卓系统的一个重要进程&#xff0c;由init进程创建而来&#xff1b;另外系统里的重要进程&#xff08;system_server等&#xff09;都是由zygote进程fork的&#xff0c;所有的app进程也是由zygote进程fork的。 一、C 里的fork函数 fork是Linux里面创建子进程的函…

电脑怎么录音?分享2种音频录制方法

在日常生活和工作中&#xff0c;我们经常需要录制电脑上的音频&#xff0c;无论是为了记录会议内容、保存网络课程&#xff0c;还是为了制作自己的音频素材&#xff0c;录音功能都显得尤为重要。那么电脑怎么录音&#xff1f;本文将详细介绍2种方法教你如何在电脑上进行录音&am…

这个是 2024 Idea最新激活码

idea的激活与安装 操作如下&#xff1a; ① 打开网站&#xff1a;https://web.52shizhan.cn 切换到&#xff1a;正版激活码&#xff0c;点击获取 ② 获取后的激活码&#xff0c;到idea里打开help->register 打开弹窗&#xff0c;如图 切换的activate code 输入激活码&…

预埋螺栓抗滑移系数检测 内六角螺栓扭矩系数检测

螺栓检测范围&#xff1a;螺栓&#xff0c;高强螺栓&#xff0c;地脚螺栓&#xff0c;不锈钢螺栓&#xff0c;六角头螺栓&#xff0c;管片螺栓&#xff0c;膨胀螺栓&#xff0c;化学螺栓&#xff0c;镀锌螺栓&#xff0c;植筋螺栓&#xff0c;普通螺栓&#xff0c;钢结构螺栓&a…

Ubuntu乌班图安装VIM文本编辑器工具

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu-24.04-live-server-amd64启用ssh Ubuntu安装qemu-guest-agent 文章目录 系列文章目录前言一、安装VIM&#xff1f;二、VIM基本设置总结 前言 从centos转到Ubuntu发现默认安装没有vi 一、安装VIM&#xff1…

Springboot整合Kafka消息队列服务实例

一、Kafka相关概念 1、关于Kafka的描述 Kafka是由Apache开源&#xff0c;具有分布式、分区的、多副本的、多订阅者&#xff0c;基于Zookeeper协调的分布式处理平台&#xff0c;由Scala和Java语言编写。通常用来搜集用户在应用服务中产生的动作日志数据&#xff0c;并高速的处…

Erlang程序设计[Part1-Part2 chapter4]

前言&#xff1a; 环境安装 Erlang Shell&#xff0c;CSDN搜教程 Erlang Shell实操 启动 erl Erlang Shell以表达式为执行单位&#xff1f; 结束标志 .加上回车 Part1 为何用 Erlang chapter 1 什么是并发 并发vs并行 并发 单核cpu运行多个进程 一次运行一个 并行 多…