第13课 摩斯密码#
13.1 项目介绍#
摩尔斯电码也被称作摩斯密码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。
现在我们使用它来作为我们的密码门。
13.2 摩斯密码的相关资料#
摩斯密码对应的字符如下:

13.3 实验组件#
|
|
|
|
|---|---|---|---|
ESP32 Plus主板 *1 |
按键 *2 |
180度舵机 *1 |
3P线 *2 |
|
|
|
|
I2C LCD1602模块 *1 |
4P线 *1 |
USB线 *1 |
13.4 模块接线图#
木板房子⑦处(左侧)按键1,木板房子⑨处(右侧)按键2,门舵机和I2C 1602 LCD模块的控制引脚:
木板房子⑦处(左侧)按键1(S引脚) |
io4 |
|---|---|
木板房子⑨处(右侧)按键2(S引脚) |
io32 |
门舵机(橙黄色线引脚) |
io13 |
I2C 1602 LCD模块(SDA引脚) |
SDA |
I2C 1602 LCD模块(SCL引脚) |
SCL |
⚠️ 特别注意:智能家居已经组装好了,这里不需要把按键、舵机和I2C 1602 LCD模块拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

13.5 代码流程图#

13.6 实验代码#
简单的使用
作为正确密码。
非常简单的实现按键的点击、双击、长按等功能。对应摩斯密码,点击为“.”,长按再松开为“-”。(“.”的意思是点击按钮,“-”的意思是长按按钮2秒以上)
打开“Thonny”软件,点击“此电脑” → “D:” → “MicroPython资料” → “MicroPython_代码”。然后鼠标左键双击“Project_13_MorseCode.py”。
# 作者 : www.keyes-robot.com
# 导入 machine, time and LCD 模块.
from machine import Pin, PWM
from time import sleep_ms, ticks_ms
from machine import I2C, Pin
from i2c_lcd import I2cLcd
DEFAULT_I2C_ADDR = 0x27
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000)
lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16)
button1 = Pin(4, Pin.IN, Pin.PULL_UP)
button2 = Pin(32, Pin.IN, Pin.PULL_UP)
count = 0
time_count = 0
password = "" #输入密码
correct_password = "-.-" #正确密码
lcd.move_to(0, 0)
lcd.putstr("Enter password")
pwm = PWM(Pin(13))
pwm.freq(50)
pwm.duty(25) #关门
sleep_ms(1000)
while True:
btnVal1 = button1.value() # 读取按钮的值 1
if(btnVal1 == 0):
sleep_ms(10)
while(btnVal1 == 0):
time_count = time_count + 1 #开始计算按键被按下的时间
sleep_ms(200) #时间为200ms累加
btnVal1 = button1.value()
if(btnVal1 == 1):
count = count + 1
print(count)
print(time_count)
if(time_count > 3): #如果按键被按下的时间大于200*3ms,密码加"-"
lcd.clear()
lcd.move_to(0, 1)
password = password + "-"
else:
lcd.clear()
lcd.move_to(0, 1)
password = password + "." #否则加"."
lcd.putstr('{}'.format(password))
time_count = 0
btnVal2 = button2.value()
if(btnVal2 == 0):
if(password == correct_password): #如果输入密码正确
lcd.clear()
lcd.putstr("open")
pwm.duty(120) #开门
password = "" #清除密码
sleep_ms(1000)
else: #如果密码错误
lcd.clear()
lcd.putstr("close")
pwm.duty(25) #关门
sleep_ms(1000)
lcd.clear()
lcd.putstr("error")
sleep_ms(1000)
lcd.clear()
lcd.putstr("enter again")
password = "" #清除密码
13.7 实验结果#
按照接线图接好线,将 ESP32 主控板通过Micro USB数据线与计算机相连供电,外接电源供电,然后单击按钮
,示例代码开始执行。

示例代码开始执行之后,你会看到的现象是:开始LCD1602显示“Enter password”,点击或长按木板房子⑦处(左侧)按键1,来输入密码,如果输入正确密码是 “-.-” (“.”的意思是点击按钮,“-”的意思是长按按钮2秒以上);再点击按木板房子⑨处(右侧)按键2,门就转动打开,LCD1602显示“open”;然后,长按木板房子⑨处(右侧)按键2再松开,门再次转动关门。如果是输入了其它错误的密码,门不会动,LCD1602显示error,2秒后显示enter again。


单击
“停止/启动后端进程”退出程序。






