ESP32(MicroPython) 网页控制环形WS2812

这篇具有很好参考价值的文章主要介绍了ESP32(MicroPython) 网页控制环形WS2812。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ESP32(MicroPython)网页控制环形WS2812

本程序用于提供网页控制环形WS2812,为了不影响网页正常运行,本程序取消了流水灯形式,改为每个灯或每2个灯或每4个灯取随机亮度,延时和亮度可调。主控换成ESP32C3,感觉网页流畅度比ESP32-EROOM32低一些。

程序如下文章来源地址https://www.toymoban.com/news/detail-606835.html

#导入Pin模块
from machine import Pin
import time
from machine import Timer
from neopixel import NeoPixel
import random
from machine import ADC
import network
import socket
import _thread

#定义RGB控制对象
#控制引脚为13,RGB灯串联5个
pin=9
rgb_num=24
rgb_led=NeoPixel(Pin(pin,Pin.OUT),rgb_num)

brightness=24
delay=300
mode=2

#定义LED控制对象
led1=Pin(8,Pin.OUT,Pin.PULL_DOWN)

#连接的WIFI账号和密码
ssid = " "
password = " "

#WIFI连接
def wifi_connect():
    wlan=network.WLAN(network.STA_IF)  #STA模式
    wlan.active(True)  #激活
    
    if not wlan.isconnected():
        print("conneting to network...")
        wlan.connect(ssid,password)  #输入 WIFI 账号密码
        
        while not wlan.isconnected():
            led1.value(1)
            time.sleep_ms(300)
            led1.value(0)
            time.sleep_ms(300)
        led1.value(0)
        return False
    else:
        led1.value(0)
        print("network information:", wlan.ifconfig())
        return True

#网页数据
def web_page():
  html = """<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  
  
  <style>
    .button{display: inline-block; background-color: #141414; border: none; 
    border-radius: 4px; color: white; padding: 8px 15px; text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
    .button2{background-color: #282828;}.button3{background-color: #3c3c3c;}.button4{background-color: #505050;}
    .button5{background-color: #646464;}.button6{background-color: #787878;}.button7{background-color: #8c8c8c;}
    .button8{background-color: #a0a0a0;}.button9{background-color: #b4b4b4;}.button10{background-color: #c8c8c8;}
    .button11{background-color: #f01010;}.button12{background-color: #10f010;}.button13{background-color: #1010f0;}
    .button14{background-color: #0000ff;}.button15{background-color: #0f0fe1;}.button16{background-color: #1e1ed2;}
    .button17{background-color: #2d2dc3;}.button18{background-color: #3c3cb4;}.button19{background-color: #4b4ba5;}
    .button20{background-color: #5a5a96;}.button21{background-color: #696987;}.button22{background-color: #787878;}
    .button23{background-color: #f0f010;}
    a:link {text-decoration:none;}a:visited {text-decoration:none;}a:hover {text-decoration:none;}
    a:active {text-decoration:none;} 
    html {
     font-family: Arial;
     display: inline-block;
     margin: 0px auto;
     text-align: center;
    }
    h2 { font-size: 1.5rem; }
    p { font-size: 1.5rem; }
    .units { font-size: 1rem; }
    .dht-labels{
      font-size: 1rem;
      vertical-align:middle;
      padding-bottom: 7px;
    }
  </style>
</head>
<body>
  <h2>ESP32 WS2812 Control</h2> <p><a href="/?d1">Brightness: <strong>""" + str(brightness) + """</strong></a></p>
        <p><a href="/?b1"><button class="button button1">12</button></a><a href="/?b2"><button class="button button2">15</button></a>
        <a href="/?b3"><button class="button button3">18</button></a><a href="/?b4"><button class="button button4">21</button></a>
        <a href="/?b5"><button class="button button5">24</button></a><a href="/?b6"><button class="button button6">27</button></a>
        <a href="/?b7"><button class="button button7">30</button></a><a href="/?b8"><button class="button button8">33</button></a>
        <a href="/?b9"><button class="button button9">36</button></a><a href="/?b10"><button class="button button10">39</button></p></a>
        <p><a href="/?d2">Mode: <strong>""" + str(mode) + """</strong></a></p>
        <p><a href="/?b11"><button class="button button11">0</button></a>
        <a href="/?b12"><button class="button button12">1</button></a>
        <a href="/?b13"><button class="button button13">2</button></a>
        <a href="/?b23"><button class="button button23">3</button></a></p>
        <p><a href="/?d3">Delay: <strong>""" + str(delay) + """</strong></a></p>
        <p><a href="/?b15"><button class="button button15">200</button></a><a href="/?b16"><button class="button button16">300</button></a>
        <a href="/?b17"><button class="button button17">400</button></a><a href="/?b18"><button class="button button18">500</button></a>
        <a href="/?b19"><button class="button button19">600</button></a><a href="/?b20"><button class="button button20">700</button></p>
</body>
</html>"""
  return html

#定时器0中断函数
def time0_irq(i1,i2):
    global brightness
    global mode
    global delay
    while True:
        if mode==0 : #关灯
            i=0
            for i in range(rgb_num):
                rgb_led[i]=(0, 0, 0)
            rgb_led.write()   
            time.sleep_ms(delay)
        if mode==1 : #每个灯取随机颜色
            i=0
            for i in range(rgb_num):
                d1=random.randint(0,brightness)
                e1=random.randint(0,brightness)
                f1=random.randint(0,brightness)
                rgb_led[i]=(d1, e1, f1)
            rgb_led.write()   
            time.sleep_ms(delay)
        if mode==2 : #每2个灯取随机颜色
            i=0
            for i in range(rgb_num): 
                if i%2==0:
                    d1=random.randint(0,brightness)
                    e1=random.randint(0,brightness)
                    f1=random.randint(0,brightness)
                    rgb_led[i]=(d1, e1, f1)
                else:
                    rgb_led[i]=(d1, e1, f1)
            rgb_led.write()   
            time.sleep_ms(delay)
        if mode==3 : #每4个灯取随机颜色
            i=0
            for i in range(rgb_num):
                if i%4==0:
                    d1=random.randint(0,brightness)
                    e1=random.randint(0,brightness)
                    f1=random.randint(0,brightness)
                    rgb_led[i]=(d1, e1, f1)
                else:
                    rgb_led[i]=(d1, e1, f1)
            rgb_led.write()   
            time.sleep_ms(delay)
           
wifi_connect()
#SOCK_STREAM表示的是TCP协议,SOCK_DGRAM表示的是UDP协议
my_socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #创建socket连接
# 将socket对象绑定ip地址和端口号
my_socket.bind(('', 80))
# 相当于电话的开机 括号里的参数表示可以同时接收5个请求
my_socket.listen(5)
def server(i1,i2):
    global brightness
    global mode
    global delay
    while True:
        try:
            # 进入监听状态,等待别人链接过来,有两个返回值,
            #一个是对方的socket对象,一个是对方的ip以及端口
            client, addr = my_socket.accept()
            print('Got a connection from %s' % str(addr))
            # recv表示接收,括号里是最大接收字节
            request = client.recv(1024)
            request = str(request)
            print('Content = %s' % request)
            # 进入监听状态,等待别人链接过来,有两个返回值,
            #一个是对方的socket对象,一个是对方的ip以及端口
            client, addr = my_socket.accept()
            print('Got a connection from %s' % str(addr))
            # recv表示接收,括号里是最大接收字节
            request = client.recv(1024)
            request = str(request)
            print('Content = %s' % request)
            b1 = request.find('/?b1')
            b2 = request.find('/?b2')
            b3 = request.find('/?b3')
            b4 = request.find('/?b4')
            b5 = request.find('/?b5')
            b6 = request.find('/?b6')
            b7 = request.find('/?b7')
            b8 = request.find('/?b8')
            b9 = request.find('/?b9')
            b10 = request.find('/?b10')
            b11 = request.find('/?b11')
            b12 = request.find('/?b12')
            b13 = request.find('/?b13')
            b23 = request.find('/?b23')
            b15 = request.find('/?b15')
            b16 = request.find('/?b16')
            b17 = request.find('/?b17')
            b18 = request.find('/?b18')
            b19 = request.find('/?b19')
            b20 = request.find('/?b20')
            d1 = request.find('/?d1')
            d2 = request.find('/?d2')
            d3 = request.find('/?d3')
            if b1 == 6:
                brightness=12
            if b2 == 6:
                brightness=15
            if b3 == 6:
                brightness=18
            if b4 == 6:
                brightness=21
            if b5 == 6:
                brightness=24
            if b6 == 6:
                brightness=27
            if b7 == 6:
                brightness=30
            if b8 == 6:
                brightness=33
            if b9 == 6:
                brightness=36
            if b10 == 6:
                brightness=39
            if b11 == 6:
                mode=0
            if b12 == 6:
                mode=1
            if b13 == 6:
                mode=2
            
            if b15 == 6:
                delay=200
            if b16 == 6:
                delay=300
            if b17 == 6:
                delay=400
            if b18 == 6:
                delay=500
            if b19 == 6:
                delay=600
            if b20 == 6:
                delay=700
            if b23 == 6:
                mode=3    
            if d1 == 6:
                brightness=12
            if d2 == 6:
                mode=1
            if d3 == 6:
                delay=400    
        
            response = web_page()
            client.send('HTTP/1.1 200 OK\n')
            client.send('Content-Type: text/html\n')
            client.send('Connection: close\n\n')
            client.sendall(response)
            client.close()
        except OSError as e:
            pass
            print('Connection closed')

i1=0
i2=0
_thread.start_new_thread(server, (i1,i2))
_thread.start_new_thread(time0_irq, (i1, i2))

到了这里,关于ESP32(MicroPython) 网页控制环形WS2812的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Nano Framework ESP32篇】WS2812 彩色灯带实验

    地球人皆知,许多物联网教程作者的心中都深爱着一灯大师,所以第一个例程总喜欢点灯,高级一点的会来个“一闪一闪亮晶晶”。老周今天要扯的也是和灯有关的,但不单纯地点个灯,那样实在不好玩,缺乏乐趣。老周打算舞个龙灯,哦不,是用 LED 彩色灯带给伙伴们整点

    2024年04月17日
    浏览(55)
  • 阿里云iot haas Micropython连接esp32;esp32物联网设备上报信息及云端信息获取;远程控制设备自带led熄灭;网页界面交互远程控制

    参考:https://blog.csdn.net/HaaSTech/article/details/125975052 https://iot.console.aliyun.com/ https://www.bbsmax.com/A/x9J2X8nZd6/ 首先烧录阿里云iot haas固件: https://haas.iot.aliyun.com/haasapi/index.html#/Python/docs/zh-CN/startup/ESP32_startup ***直接下载后可以通过vscode插件烧录;烧录好后也可以在thony编辑运行代码

    2024年02月02日
    浏览(57)
  • 物联网开发笔记(56)- 使用Micropython开发ESP32开发板之手机蓝牙控制舵机

    一、目的         这一节我们学习如何使用我们的ESP32开发板来实现通过蓝牙控制接在ESP32开发板上的舵机。 二、环境         ESP32 + MG90S舵机 + Thonny IDE + 几根杜邦线 + 手机         舵机的链接方法见第54节:物联网开发笔记(54)- 使用Micropython开发ESP32开发板之控制

    2024年02月09日
    浏览(53)
  • 物联网开发笔记(41)- 使用Micropython开发ESP32开发板之控制4*4矩阵键盘

    一、目的         这一节我们学习如何使用我们的ESP32开发板来操作4*4矩阵键盘。 二、环境         ESP32 + PS2摇杆 + 4*4矩阵键盘 + Thonny IDE + 十几根杜邦线 接线方法:   矩阵键盘原理:   三、代码 四、演示效果 五、矩阵键盘购买         同样,我们大家在某宝上搜

    2024年02月12日
    浏览(48)
  • 关于STM32利用TIM+PWM+DMA控制WS2812

    MCU:STM32F103c8t6 开发工具:STM32CubeMX  使用板子参考原理图:STM32F103C8T6最小系统板开源链接 脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输

    2024年02月01日
    浏览(53)
  • 物联网开发笔记(32)- 使用Micropython开发ESP32开发板之手机扫二维码远程控制开关灯(2)

    一、目的         上一节我们测试了远程控制的环境是好的,这一节在我们的240x240的oled屏幕上显示二维码,然后用手机扫二维码,远程控制LED灯的状态。 二、环境         ESP32 + 240x240的oled彩色屏幕+ Thonny IDE + 几根杜邦线             接线方式请看上前面的章节,

    2024年02月09日
    浏览(59)
  • (STM32笔记5)ws2812驱动开发

    ws2812 需要开发的外设:ws2812 开发环境:MDK 开发板:stm32最小系统板 杜邦线无数 一、原理阐述 (一) 这个ws2812有很多种,一个小灯、灯带,矩形像素屏等等。 这些都是DIN连接输入,DOUT连接输出,另外两个引脚是GNE和VCC   (二) 数据传输原理: 第1个WS2812B灯珠接收到了第1个

    2024年01月19日
    浏览(45)
  • 物联网开发笔记(59)- 使用Micropython开发ESP32开发板之控制合宙4g Air724U模块

    一、目的         这一节我们学习如何使用我们的ESP32开发板来控制合宙4g Air724U模块。 二、环境         ESP32 + 合宙4g Air724U模块 + Thonny IDE + 几根杜邦线 接线方法: 注意连接方式: ESP32的RX2-----4G模块的TX ESP32的TX2-----4G模块的RX 三、介绍         1,数据流通图 ESP32

    2024年02月08日
    浏览(74)
  • 物联网开发笔记(31)- 使用Micropython开发ESP32开发板之手机扫二维码远程控制开关灯(1)

    一、目的         我们分3节讲述远程控制。这一节在我们的240x240的oled屏幕上显示二维码,然后用手机扫二维码,从开发板的TCP服务器上返回字符串。 二、环境         ESP32 + 240x240的oled彩色屏幕+ Thonny IDE + 几根杜邦线             接线方式请看上前面的章节,此处

    2024年02月15日
    浏览(51)
  • 物联网开发笔记(89)- 使用Micropython开发ESP32开发板之合宙ESP32 C3开发板通过串口SPI控制st7789 TFT液晶屏1.3寸

    一、目的         这一节我们学习如何使用合宙的ESP32 C3开发板控制1.3寸彩色TFT显示屏模块,分辨率240*240,SPI接口,ST7789驱动芯片。 二、环境         ESP32  C3 + Thonny + 1.3寸 st7789液晶屏模块 + 几根杜邦线 + Win10 接线方法:   三、st7789 TFT显示屏驱动 st7789py.py   四、点亮

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包