657|2

115

帖子

8

TA的资源

一粒金砂(高级)

楼主
 

任务5:通过网络控制WS2812B| 【调色板控彩灯】 [复制链接]

 

本帖最后由 alanlan86 于 2023-9-18 08:32 编辑

#准备工作

硬件

  • ESP32-S3 TFT Feather开发板一块

##HTTP Web Server

#代码分析
##库

  • 通过Web Server控制WS2812B需要导入adafruit_httpserver的lib文件
  1. from time import monotonic
  2. import board
  3. import microcontroller
  4. import neopixel
  5. import socketpool
  6. import wifi
  7. from adafruit_httpserver import Server, Request, Response, Websocket, GET

##Server

  • 创建套接字,Http Server以及neopixel
  1. pool = socketpool.SocketPool(wifi.radio)
  2. server = Server(pool, debug=True)
  3. pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
  4. websocket: Websocket = None
  5. next_message_time = monotonic()

HTML

  • 在http GET请求,返回html页面,其中重点部分是颜色拾取器,进行颜色的选择,然后用于设定LED的颜色。
  1. HTML_TEMPLATE = """
  2. <html lang="en">
  3. <head>
  4. <title>Websocket Client</title>
  5. </head>
  6. <body>
  7. <p>CPU temperature: <strong>-</strong>°C</p>
  8. <p>NeoPixel Color: <input type="color"></p>
  9. <script>
  10. const cpuTemp = document.querySelector('strong');
  11. const colorPicker = document.querySelector('input[type="color"]');
  12. let ws = new WebSocket('ws://' + location.host + '/connect-websocket');
  13. ws.onopen = () => console.log('WebSocket connection opened');
  14. ws.onclose = () => console.log('WebSocket connection closed');
  15. ws.onmessage = event => cpuTemp.textContent = event.data;
  16. ws.onerror = error => cpuTemp.textContent = error;
  17. colorPicker.oninput = debounce(() => ws.send(colorPicker.value), 200);
  18. function debounce(callback, delay = 1000) {
  19. let timeout
  20. return (...args) => {
  21. clearTimeout(timeout)
  22. timeout = setTimeout(() => {
  23. callback(...args)
  24. }, delay)
  25. }
  26. }
  27. </script>
  28. </body>
  29. </html>
  30. """

##响应

  • 针对HTTP页面响应,处理浏览器下发的操作。
  1. @server.route("/client", GET)
  2. def client(request: Request):
  3. return Response(request, HTML_TEMPLATE, content_type="text/html")
  4. @server.route("/connect-websocket", GET)
  5. def connect_client(request: Request):
  6. global websocket # pylint: disable=global-statement
  7. if websocket is not None:
  8. websocket.close() # Close any existing connection
  9. websocket = Websocket(request)
  10. return websocket
  11. server.start(str(wifi.radio.ipv4_address))
  12. while True:
  13. server.poll()
  14. # Check for incoming messages from client
  15. if websocket is not None:
  16. if (data := websocket.receive(True)) is not None:
  17. r, g, b = int(data[1:3], 16), int(data[3:5], 16), int(data[5:7], 16)
  18. pixel.fill((r, g, b))
  19. # Send a message every second
  20. if websocket is not None and next_message_time < monotonic():
  21. cpu_temp = round(microcontroller.cpu.temperature, 2)
  22. websocket.send_message(str(cpu_temp))
  23. next_message_time = monotonic() + 1

##综合源码

webserver_led_rgb.py

(2.68 KB, 下载次数: 1)

#调试

#演示

  • 根据调试log窗口可知,ESP32连接WiFi路由器获得192.168.0.100的IP,然后将连入相同路由的手机浏览器输入“192.168.0.100/client”,此时,浏览器将出现html页面,分别包含CPU的温度以及LED的颜色可配置,点击颜色设置,即可调色板载Neopixel的RGB LED灯。
    播放器加载失败: 未检测到Flash Player,请到安装
    webserver_ledrgb

最新回复

调试板控彩灯 [attach]733213[/attach]     详情 回复 发表于 2023-9-17 20:53
点赞 关注
 
 

回复
举报

6909

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

调试板控彩灯

 

点评

“广普” 4这样的啦!。。。哈哈  详情 回复 发表于 2023-9-18 08:34
 
 
 

回复

115

帖子

8

TA的资源

一粒金砂(高级)

板凳
 

“广普” 4这样的啦!。。。哈哈

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表