嵌入式实训day6

news2024/11/26 4:38:11

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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue项目 [WDS] Disconnected解决方法

Vue项目出现这个错误&#xff1a;[WDS] Disconnected&#xff01; 1.对项目运行本身造成什么实质性的影响 2.红色的提示摆在那里确实不太好看 解决 打开 Application->LocalStorage&#xff0c;在key上添加loglevel:webpack-dev-server&#xff0c;在Value上添加SILENT。

项目计划

1.什么是项目计划&#xff1f; 2.软件项目计划的作用 3.项目计划的内容 4.项目计划的主要内容 5.滚动计划方法 6.WBS方法 7.软件项目的特点 8.制定计划的要点 9.直接成本和间接成本 10.为什么说项目计划不是一个文档&#xff0c;而是一个持续的策划过程&#xff1f; 项目计划不…

C++升级软件时删除老版本软件的桌面快捷方式(附源码)

删除桌面快捷方式其实是删除桌面上的快捷方式文件,那我们如何去删除桌面快捷方式文件呢?软件可能已经发布过多个版本,其中的一些版本的快捷方式文件名称可能做了多次改动,程序中不可能记录每个版本的快捷方式名称,没法直接去删除快捷方式文件。本文就给出一种有效的处理办…

01:HAL库DMA解算舵机

一&#xff1a;实现效果 DMA解算舵机 从下到上分别为舵机1&#xff0c;2&#xff0c;3&#xff0c;分别由函数Servo_SetAngle1&#xff08;&#xff09;&#xff0c;Servo_SetAngle2&#xff08;&#xff09;&#xff0c;Servo_SetAngle3&#xff08;&#xff09;控制。 舵机1…

anaconda的基础用法

python和包以及anaconda的概念关系 环境 “好比一栋楼&#xff0c;在楼里面分配一间屋给各种‘包’放&#xff0c;每间房里面的‘包’互不影响” 激活环境 “告诉电脑&#xff0c;我现在要用这个屋子里面的‘包’来做东西了所以要进这间屋子” 移除环境 “现在这个屋子里…

基于Java的冬奥会科普平台

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

最值得入手的宠物空气净化器!希喂、352、安德迈真实测评~

随着天气越来越热&#xff0c;猫咪们也都开始掉毛啦。这时候&#xff0c;家里面到处都飘浮着猫咪们的浮毛和粑粑异味。抵抗力较差的铲屎官&#xff0c;身体就会出现一些问题&#xff0c;例如打喷嚏、咳嗽等呼吸道问题。 很多铲屎官以为用粘毛器、吸尘器等工具就能将猫咪们掉落…

欢乐钓鱼大师游戏攻略:萌新必备攻略大全!钓鱼脚本!

《欢乐钓鱼大师》是一款休闲益智类游戏&#xff0c;以钓鱼为主题&#xff0c;玩家需要通过各种钓鱼任务和挑战&#xff0c;收集不同种类的鱼类&#xff0c;并提升自己的钓鱼技术和装备。本文将为大家详细解析游戏的各个方面&#xff0c;帮助玩家更好地掌握游戏技巧&#xff0c;…

PAT B1008. 数组元素循环右移问题

题目描述 一个数组A中存有N(N>O)个整数&#xff0c;在不允许使用另外数组的前提下&#xff0c;将每个整数循环向右移M(M≥0)个位置,即将A中的数据由( …)变换为(……)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,则应如何设计移动的方法?输…

FastAdmin后台开发框架 lang 任意文件读取漏洞复现

0x01 产品简介 FastAdmin是一款基于PHPBootstrap的开源后台框架&#xff0c;专为开发者精心打造。它基于ThinkPHP和Bootstrap两大主流技术构建&#xff0c;拥有完善的权限管理系统和一键生成CRUD等强大功能。FastAdmin致力于提高开发效率&#xff0c;降低开发成本&#xff0c;…

第二证券炒股知识:新手炒股要注意什么风险?

股票商场作为现代金融商场的重要组成部分&#xff0c;招引了众多出资者的目光。但是关于新手来说炒股赚钱并不是那么简单的&#xff0c;其间蕴含着诸多危险。关于新手炒股要注意什么危险&#xff0c;中航资本下面就为大家具体介绍一下。 新手炒股要注意的危险&#xff1a; 1、…

云计算【第一阶段(16)】安装及管理程序

一、linux 应用程序基础 当我们主机安装linux操作系统 时候&#xff0c;也会同时安装一些软件或网络服务等等&#xff0c;但是随着系统一起安装的软件包毕竟他是少数的&#xff0c; 能够实现的功能也是有限的&#xff0c;那么我们相拥为主机提供更多更丰富的功能的时候&#x…

OpenAI 600万天价年薪震惊网友,全美顶尖AI公司薪酬大曝光!

最近&#xff0c;一张美国科技大厂的薪酬表曝出&#xff0c;OpenAI以500万起薪领衔。初创公司给出的薪酬&#xff0c;竟然超过了所有大型科技公司。不过初级码农&#xff0c;时薪却低至85元。 顶级公司的AI工程师能挣多少钱&#xff1f; 最近&#xff0c;这张美国科技大公司的…

“非遗+全身动作捕捉设备”如何打造交互式叙事新消费场景?

在数字化时代&#xff0c;非遗传承渠道逐渐数字化、科技化&#xff0c;利用“虚拟人全身动作捕捉设备”技术提升了非遗文化的社会能见度&#xff0c;让非遗文化重新吸引年轻人的目光。 “虚拟人全身动作捕捉设备”&#xff0c;可以让虚拟人化身虚拟主持人、虚拟主播、虚拟嘉宾…

图-多叉树的直径(hard)

目录 一、问题描述 二、解题思路 1.存储结构 2.算法描述 三、代码实现 四、刷题链接 五、参考 一、问题描述 二、解题思路 1.存储结构 使用邻接表结构来存储无向图&#xff0c;边结点存储结构为[终点&#xff0c;边长(也就是权重)] 2.算法描述 从某一个结点&#xff08;…

STM32开发过程中碰到的问题总结 - 3

文章目录 前言1. keil5升级到最新版本使用armV6编译工具链编译不通过2. 最新的keil用Jlink调试失败3. 移动了目录后跑不起来了4. 串口兼容了GNU 和arm只会&#xff0c;编译出来的成果物&#xff0c;串口输出不正常5.STM32下哪些IO口可以作为中断触发去使用6. 触发GPIO10的外部中…

Python机器学习完整流程:从数据清洗到推理落地

目录 一、引言 二、数据清洗 数据加载与初步探索 缺失值处理 异常值处理 特征编码与转换 数据集划分 三、模型训练 四、模型文件生成 五、模型部署与推理落地 六、总结 一、引言 在当今数据驱动的时代&#xff0c;机器学习已成为解决复杂问题的有力工具。而…

Django期末重点

思维导图 一、Djanog框架基础 MVT设计模式&#xff08;model模型【操作数据库】、template模板【页面展示】、view视图【处理请求和调用模型模板】&#xff09; 二、Django项目框架搭建 创建项目骨架 django-admin startproject 项目名启动服务 &#xff08;1&#xff09;p…

Eigne库安装及使用教程

文章目录 1.Eigne库介绍2.Eigne库安装3.Eigne库使用4.some examples5.参考文献 1.Eigne库介绍 Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C库&#xff0c;它里面包含了很多算法。它的License是MPL2。它支持多平台。 Eigen采用源码的方式提供给用户使用&#xff0c;在…

赛氪网荣膺“创新型中小企业”称号,科技创新再显卓越实力

近日&#xff0c;北京市经济和信息化局揭晓了2024年度3月份北京市创新型中小企业的光荣名单&#xff0c;其中北京环球赛乐科技有限公司&#xff08;简称赛氪网&#xff09;脱颖而出&#xff0c;再度展现其在创新领域的卓越实力&#xff01; 作为早已跻身“高企之光”行列的佼佼…