使用MicroPython制作红绿灯模拟器

我们将使用行人步行按钮实现交通信号灯。 该项目与LED配合使用,这使我们能够在代码执行时看到其状态。 对于交通信号灯(也称为刹车灯),我们将使用红色,黄色和绿色的LED来匹配交通信号灯上的相同颜色的灯。 我们还将使用红色和黄色的LED来表示“请勿行走”(红色)和“行走”(黄色)指示灯。

我们将使用按钮(也称为瞬时按钮),因为它仅在按下时才触发(打开)。 释放后,它不再被触发(关闭)。 触发是用于描述按钮状态的词,其中“触发”表示从按钮的一侧到另一侧的连接已连接(打开)。 保持触发(锁定)的按钮称为闩锁按钮,通常必须再次按下该按钮才能将其关闭。

我们将首先打开绿色交通信号灯LED和红色步行LED信号,以模拟交通信号灯和步行信号。 这是我们将要使用的正常状态。 当按下按钮时,交通信号灯将变成黄色几秒钟,然后变成红色。 几秒钟后,步行信号将变为黄色,几秒钟后将开始闪烁。 再过几秒钟后,步行信号将循环回到红色,交通信号灯变为绿色。

为了使事情变得更加有趣,我们还将看到如何修改该项目,以便使用从网页模拟的按钮。 我们将看到如何通过网络远程控制硬件和代码。 如果使用的Pyboard或其他不具有任何联网功能的MicroPython板,则将需要一个网络模块。 在我们开发项目时,我们将重新修改Pyboard的网络。

零件需求

设置硬件

尽管有很多电线需要使用WiPy进行连接,而对于Pyboard则需要更多,但我们将使用的组件很容易插入面包板上。

使用WiPy的接线图

使用Pyboard的接线图

代码编写

现在该为我们的项目编写代码了。我们将分两部分编写代码。 在第一部分中,我们将看到如何编写代码来模拟人行横道按钮和交通信号灯。 在第二部分中,我们将放弃使用硬件按钮,而是使用Web浏览器来远程控制按钮动作。

正如您将看到的,第2部分将重用第一部分中的大多数代码,但使用HTML服务器代码会更加复杂。 让我们从项目的第一部分开始。

第1部分:交通信号灯模拟器–使用按钮

该项目的第1部分的代码将需要监视按钮,并在按下按钮时如上所述循环照明。 我们还需要代码来初始化将LED设置为初始熄灭的LED。 我们可以编写用于监视按钮和循环LED的函数。 我们将使用中断将按钮的函数绑定到硬件,以便避免使用轮询循环。

导入

设置

该项目的设置代码将需要初始化按钮和LED实例,然后关闭所有LED(以防万一),并打开绿色的停车灯LED和红色的步行信号LED。 下面显示了设置和初始化的代码。

函数

该项目的这一部分需要两个函数。 首先,我们需要一个循环灯光的函数。 其次,我们需要一个监视按钮按下的功能。 让我们看一下循环灯的函数。

我们将自行车灯函数命名为cycle_lights()。 回想一下,我们需要控制灯光如何改变状态。 如前所述,我们以特定的周期进行此操作。 概括地说,当我们要模拟按下步行请求按钮时更改红绿灯时调用此函数。 因此,将从按钮的代码中调用此函数。

下面显示了cycle_lights()按钮的代码。 如您所见,代码非常简单。 唯一棘手的部分可能是用于使黄色步行LED闪烁的循环。

我们将按钮函数命名为button_pressed()。 此函数用作按钮按下中断的回调。 从技术上讲,我们告诉MicroPython将这种方法与pin中断相关联,但稍后我们会看到。 但是,此函数还有另一个元素需要说明。

当我们使用按钮之类的组件并且用户(您)按下按钮时,按钮中的触点不会立即从关闭状态变为打开状态。 在很小的时期内,读取的值不稳定。 因此,我们不能简单地说“引脚何时变高”,因为在引脚上读取的值可能会迅速从低变高(或从高变低)。 这称为弹跳。 我们可以使用代码(以及其他技术)人为地克服这种情况-称为去反弹。

在这种情况下,我们可以检查随时间变化的引脚(按钮)的值,并且仅当该值在此期间保持稳定时,才“触发”按钮按下。下面给出了用于去反弹的代码。 注意,在循环中,我们等待值50毫秒。 如果触发器足够长,我们调用cycle_lights()函数。

最后,当板子检测到中断时,我们需要设置按钮以调用button_pressed()函数。 下面在WiPy上设置回调函数。

第1部分完整代码

测试项目的这一部分需要将源代码文件复制到板上,然后执行它。 由于代码是在没有run()函数的情况下编写的,因此只需导入即可运行代码。 板上电前,请务必检查所有连接。 回想一下,一旦连接到开发板,我们将用于导入和运行代码的命令如下所示。

导入后,代码将运行,您可以按按钮查看灯光在各个阶段中的循环。 如果看不到任何指示灯亮(绿色刹车灯和红色步行信号应亮起),请检查设置和初始化代码。 如果按下按钮时灯不亮,请检查按钮的代码以确保正确无误。 如果它们没有按顺序点亮,则可能是插针接线错误。 遇到问题时,请务必检查所有接线,在断开或重新连接任何电线或组件之前,请务必先关闭电路板的电源。

第2部分:使用HTML远程控制

该部分的代码将使用第一部分中的所有代码,但我们不需要按钮的代码。 相反,我们将使用Socket类创建一个侦听器,以侦听来自Web浏览器的连接。 该代码将向客户端发送一个基于HTML的简短响应(一个简单的网页),该响应包含一个包含两个按钮的表单:一个按钮用于漫游请求,另一个按钮用于关闭服务器代码。 侦听器将在端口80上侦听。

导入

设置

无线网络设置

HTML响应字符串

函数

run()函数

第2部分完整代码(WiPy&Pyboard)

控制Web界面

详情参阅 - 亚图跨际

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值