2 Star 0 Fork 543

xiaokeai / SIGer

forked from siger121 / gitee.io 
 / 详情

育英少年05:智能门锁的实践探究【智能搭建】

进行中
成员
创建于  
2023-10-03 11:36

该问题是怎么引起的?

| 2023-09-24 | 11:19 | 【智能搭建】 | 智能门锁的实践探究

密码锁

# 定义

from miorobit import *
from FourDigitDisplay import * 
import oled_ssd1306 as oled 
import time
import radio 
radio.on()
fdd=FourDigitDisplay()
oled.initialize()
oled.clear_oled()
fdd.clear()

# 变量

z1_passin=0
ls=0
error=0 
z1_word=0
radio.config(channel=12) 
Isc=0

# 主代码

qqq=radio.receive()
cqq=qqq
while True:
	qqq=radio.receive()
	if cqq!=qqq:
		cqq=qqq
	else: 
		qqq=cqq
 	if qqq=="suo":
		oled.add_text(3,2,"close",draw=1)
		while True:
			qqq=radio.receive()
			if qqq=="jiesuo": 
				oled.clear_oled()
				break
	if qqq=="kk":
		oled.add_text(3,2,"open",draw=1)
		pin0.write_digital(1)
		sleep(1500)
		pin0.write_digital(0) 
		oled.clear_oled()
		error=0
	if z1_passin==0: 
		fdd.shownum(1501) 
	if pin2.read_digital()==1: 
		pin1.write_digital(1) 
	else:
		pin1.write_digital(0)
	if button_a.was_pressed()==1:
		z1_passin=1
		for i in range(4): 
			while True:
				if button_a.was_pressed()==1:
					Is=1s+1
					if 1s==10:
						1s=0
					fdd.shownum(int(z1_word+1s)) 
				if button_b.was_pressed()==1: 
					if i==0:
						z1_word=z1_word+ls*1000
					elif i=1:
						z1_word=z1_word+ls*100
					elif i==2:
						z1_word=z1_mord+1s*10
					elif i==3:
						z1_word=z1_word+ls
					fdd.shownum(int(z1_word)) 
					Is=0
					break
		if z1_word==1234:
			oled.add_text(3,2,"open*,draw=1) 
			pin0.write_digital(1)
			sleep(1500)
			pin0.write_digital(0) 
			oled,clear_oled()
			error=0
		elif z1_mord!=1501: 
			error=error+1
			for ass in range(3):
				oled.add_text(3,2,"wrong",draw=1) 
				pin0.write_digital(1)
				sleep(1000)
				pin0.write_digital(0)
				oled.clcar_oled()
	fdd.shownum(1501)
	if error==3:
		oled,add_text(3,2,"error",draw=1) 
		sleep(30000)
		error=0
		oled.alcar_oled()
	z1_passin=0
	ls=0
	z1_word=0
	Isc=0

远程控制

from miorobit import * 
import radio
import time
radio.config(channel=12) 
radio.on()
a=0 
b=0 
c=0 
cishu=0

# write your progran: 

while True:
	if button_a.is_pressed(): 
		while True:
			if button_a.is_pressed(): 
				a=a+1
				c=c+1 
				sleep(250)
			if button_b.is_pressed():
				b=b+1
				c=c+1
				sleep(250) 
			if c>7: #7
				display.scroll("cuo")
				c=0
				cishu=cishu+1 
				if cishu>=3;
					display.scroll("3ci") 
					sleep(10000)
					cishu=0 
				break
			if a==3 and b==4: #4 
				a=0
				b=0 
				c=0

				radio.send(*kk") 
				display,scroll("0KK") 
				display.scroll("1") 
				break

	if button_b.is_pressed(): 
		display.scroll("suo") 
		radio.send("suo") 
		whilc True:
			if button_b.is_pressed(): 
				radio.send("jiesuo") 
				display.scroll("j") 

				break
	if radio.receive=="w": 
		display.scroll("warrning")

评论 (4)

袁德俊 创建了任务
袁德俊 任务状态待办的 修改为进行中
袁德俊 修改了描述
展开全部操作日志

以下是对您提供的 MICROBIT 代码的功能介绍和生成的 README:

密码锁

这是一个使用 MICROBIT 进行密码锁控制的程序。通过键入特定数字密码实现对锁的开启和关闭。

功能介绍

  • 初始化 MICROBIT,以及相关模块和变量。
  • 使用无线电通信进行锁的远程控制。
  • 在 OLED 显示屏上显示相关信息,如锁的状态和错误信息。
  • 使用 FourDigitDisplay 模块显示密码和错误次数。
  • 使用按键控制密码输入。

使用方法

  1. 将程序上传至 MICROBIT。
  2. 运行程序后,MICROBIT 将进入密码输入模式。
  3. 使用按钮 A 输入密码,每次按下按钮 A,将增加一个数字。
  4. 使用按钮 B 确定当前输入的数字。
  5. 输入完四位数密码后,将验证密码是否正确。
  6. 如果密码正确,锁将开启,并在 OLED 显示屏上显示 "open"。
  7. 如果密码错误,将在 OLED 显示屏上显示 "wrong",并发出报警声,重试次数超过三次将进入错误锁定状态。

请确保在运行程序之前已经连接了相应的硬件设备,并正确安装了相关模块。

注意:这只是一个基础的密码锁程序,具体的硬件连接和功能实现可能需要根据实际情况进行调整和扩展。

如果有任何问题或需求,请随时联系我们的技术支持。

谢谢!

以下是对您提供的远程遥控模块的功能介绍和生成的 README:

远程遥控模块

这是一个使用 MICROBIT 进行远程遥控的程序。通过设置按钮的按下次数和特定组合实现对设备的控制。

功能介绍

  • 初始化 MICROBIT 和无线电通信模块。
  • 使用按钮 A 和按钮 B 进行控制输入。
  • 通过无线电信号发送指令实现设备控制和通信。
  • 使用显示屏显示相关信息。

使用方法

  1. 将程序上传至 MICROBIT。
  2. 运行程序后,MICROBIT 将进入等待控制指令的状态。
  3. 按下按钮 A 多次,将按下次数记录,并显示在 MICROBIT 显示屏上。
  4. 按下按钮 B 多次,将按下次数记录,并显示在 MICROBIT 显示屏上。
  5. 根据按钮 A 和按钮 B 的按下次数,可实现对设备的具体控制操作。
  6. 如果按钮 A 和按钮 B 的按下次数达到特定组合,将发送相应的无线电信号,并在显示屏上显示相应状态信息。
  7. 如果按钮 B 被长按,将发送 "suo" 信号,表示锁定设备。
  8. 如果按钮 B 被长按并再次被按下,将发送 "jiesuo" 信号,表示解锁设备。
  9. 如果接收到无线电信号 "w",将在显示屏上显示 "warrning",表示收到警告。

请确保在运行程序之前已经连接了相应的硬件设备,并正确安装了无线电通信模块。

注意:这只是一个基础的远程遥控模块程序,具体的硬件连接、按键组合和功能实现可能需要根据实际情况进行调整和扩展。

如果有任何问题或需求,请随时联系我们的技术支持。

谢谢!

来自你的消息:

我有一个MICROBIT代码,你可以帮我介绍下它的功能吗?补一个README给我。

来自WeTab AI的消息:

当然可以!请提供您的 MICROBIT 代码,我会帮您介绍它的功能并为您生成一个 README 文档。

来自你的消息:

第一个程序,名字为:密码锁

定义

from miorobit import *
from FourDigitDisplay import *
import oled_ssd1306 as oled
import time
import radio
radio.on()
fdd=FourDigitDisplay()
oled.initialize()
oled.clear_oled()
fdd.clear()

变量

z1_passin=0
ls=0
error=0
z1_word=0
radio.config(channel=12)
Isc=0

主代码

qqq=radio.receive()
cqq=qqq
while True:
qqq=radio.receive()
if cqq!=qqq:
cqq=qqq
else:
qqq=cqq
if qqq=="suo":
oled.add_text(3,2,"close",draw=1)
while True:
qqq=radio.receive()
if qqq=="jiesuo":
oled.clear_oled()
break
if qqq=="kk":
oled.add_text(3,2,"open",draw=1)
pin0.write_digital(1)
sleep(1500)
pin0.write_digital(0)
oled.clear_oled()
error=0
if z1_passin==0:
fdd.shownum(1501)
if pin2.read_digital()==1:
pin1.write_digital(1)
else:
pin1.write_digital(0)
if button_a.was_pressed()==1:
z1_passin=1
for i in range(4):
while True:
if button_a.was_pressed()==1:
Is=1s+1
if 1s==10:
1s=0
fdd.shownum(int(z1_word+1s))
if button_b.was_pressed()==1:
if i==0:
z1_word=z1_word+ls1000
elif i=1:
z1_word=z1_word+ls
100
elif i==2:
z1_word=z1_mord+1s10
elif i==3:
z1_word=z1_word+ls
fdd.shownum(int(z1_word))
Is=0
break
if z1_word==1234:
oled.add_text(3,2,"open
,draw=1)
pin0.write_digital(1)
sleep(1500)
pin0.write_digital(0)
oled,clear_oled()
error=0
elif z1_mord!=1501:
error=error+1
for ass in range(3):
oled.add_text(3,2,"wrong",draw=1)
pin0.write_digital(1)
sleep(1000)
pin0.write_digital(0)
oled.clcar_oled()
fdd.shownum(1501)
if error==3:
oled,add_text(3,2,"error",draw=1)
sleep(30000)
error=0
oled.alcar_oled()
z1_passin=0
ls=0
z1_word=0
Isc=0

来自WeTab AI的消息:

以下是对您提供的 MICROBIT 代码的功能介绍和生成的 README:

密码锁

这是一个使用 MICROBIT 进行密码锁控制的程序。通过键入特定数字密码实现对锁的开启和关闭。

功能介绍

  • 初始化 MICROBIT,以及相关模块和变量。
  • 使用无线电通信进行锁的远程控制。
  • 在 OLED 显示屏上显示相关信息,如锁的状态和错误信息。
  • 使用 FourDigitDisplay 模块显示密码和错误次数。
  • 使用按键控制密码输入。

使用方法

  1. 将程序上传至 MICROBIT。
  2. 运行程序后,MICROBIT 将进入密码输入模式。
  3. 使用按钮 A 输入密码,每次按下按钮 A,将增加一个数字。
  4. 使用按钮 B 确定当前输入的数字。
  5. 输入完四位数密码后,将验证密码是否正确。
  6. 如果密码正确,锁将开启,并在 OLED 显示屏上显示 "open"。
  7. 如果密码错误,将在 OLED 显示屏上显示 "wrong",并发出报警声,重试次数超过三次将进入错误锁定状态。

请确保在运行程序之前已经连接了相应的硬件设备,并正确安装了相关模块。

注意:这只是一个基础的密码锁程序,具体的硬件连接和功能实现可能需要根据实际情况进行调整和扩展。

如果有任何问题或需求,请随时联系我们的技术支持。

谢谢!

来自你的消息:

在给你一个 远程遥控模块:

from miorobit import *
import radio
import time
radio.config(channel=12)
radio.on()
a=0
b=0
c=0
cishu=0

write your progran:

while True:
if button_a.is_pressed():
while True:
if button_a.is_pressed():
a=a+1
c=c+1
sleep(250)
if button_b.is_pressed():
b=b+1
c=c+1
sleep(250)
if c>7: #7:学习 AI 助手,协助完成 SIGer 任务。
display.scroll("cuo")
c=0
cishu=cishu+1
if cishu>=3;
display.scroll("3ci")
sleep(10000)
cishu=0
break
if a==3 and b==4: #4:庆姥姥八十大寿
a=0
b=0
c=0

			radio.send(*kk") 
			display,scroll("0KK") 
			display.scroll("1") 
			break

if button_b.is_pressed(): 
	display.scroll("suo") 
	radio.send("suo") 
	whilc True:
		if button_b.is_pressed(): 
			radio.send("jiesuo") 
			display.scroll("j") 

			break
if radio.receive=="w": 
	display.scroll("warrning")

来自WeTab AI的消息:

以下是对您提供的远程遥控模块的功能介绍和生成的 README:

远程遥控模块

这是一个使用 MICROBIT 进行远程遥控的程序。通过设置按钮的按下次数和特定组合实现对设备的控制。

功能介绍

  • 初始化 MICROBIT 和无线电通信模块。
  • 使用按钮 A 和按钮 B 进行控制输入。
  • 通过无线电信号发送指令实现设备控制和通信。
  • 使用显示屏显示相关信息。

使用方法

  1. 将程序上传至 MICROBIT。
  2. 运行程序后,MICROBIT 将进入等待控制指令的状态。
  3. 按下按钮 A 多次,将按下次数记录,并显示在 MICROBIT 显示屏上。
  4. 按下按钮 B 多次,将按下次数记录,并显示在 MICROBIT 显示屏上。
  5. 根据按钮 A 和按钮 B 的按下次数,可实现对设备的具体控制操作。
  6. 如果按钮 A 和按钮 B 的按下次数达到特定组合,将发送相应的无线电信号,并在显示屏上显示相应状态信息。
  7. 如果按钮 B 被长按,将发送 "suo" 信号,表示锁定设备。
  8. 如果按钮 B 被长按并再次被按下,将发送 "jiesuo" 信号,表示解锁设备。
  9. 如果接收到无线电信号 "w",将在显示屏上显示 "warrning",表示收到警告。

请确保在运行程序之前已经连接了相应的硬件设备,并正确安装了无线电通信模块。

注意:这只是一个基础的远程遥控模块程序,具体的硬件连接、按键组合和功能实现可能需要根据实际情况进行调整和扩展。

如果有任何问题或需求,请随时联系我们的技术支持。

谢谢!

来自你的消息:

同样的功能,你可以用 ARDUINO 实现吗?

来自WeTab AI的消息:

当然可以!以下是用 Arduino 实现相同功能的代码示例:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // 初始化 LCD 显示屏

int buttonAPin = 2; // 按钮 A 的引脚
int buttonBPin = 3; // 按钮 B 的引脚

int buttonAState = HIGH; // 按钮 A 的状态
int buttonBState = HIGH; // 按钮 B 的状态

int buttonALastState = HIGH; // 按钮 A 的上一次状态
int buttonBLastState = HIGH; // 按钮 B 的上一次状态

int buttonAPressCount = 0; // 按钮 A 的按下次数
int buttonBPressCount = 0; // 按钮 B 的按下次数

int cishu = 0; // 计数

void setup() {
  pinMode(buttonAPin, INPUT_PULLUP); // 设置按钮 A 引脚为输入,并启用上拉电阻
  pinMode(buttonBPin, INPUT_PULLUP); // 设置按钮 B 引脚为输入,并启用上拉电阻

  lcd.begin(16, 2); // 初始化 LCD 显示屏
  lcd.backlight(); // 打开背光
  lcd.setCursor(0, 0); // 设置光标位置为第一行第一列
  lcd.print("Remote Control"); // 在 LCD 显示屏上显示标题
}

void loop() {
  buttonAState = digitalRead(buttonAPin); // 读取按钮 A 的状态
  buttonBState = digitalRead(buttonBPin); // 读取按钮 B 的状态

  // 检测按钮 A 是否按下
  if (buttonAState == LOW && buttonALastState == HIGH) {
    buttonAPressCount++; // 增加按钮 A 的按下次数
    cishu++; // 增加计数

    delay(250); // 延迟消除按钮反弹
  }

  // 检测按钮 B 是否按下
  if (buttonBState == LOW && buttonBLastState == HIGH) {
    buttonBPressCount++; // 增加按钮 B 的按下次数
    cishu++; // 增加计数

    delay(250); // 延迟消除按钮反弹
  }

  // 如果计数超过 7 次,则显示错误信息
  if (cishu > 7) {
    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Error");
    cishu = 0; // 重置计数

    delay(5000); // 显示错误信息 5 秒钟
  }

  // 如果按钮 A 按下 3 次,并且按钮 B 按下 4 次,则发送控制信号
  if (buttonAPressCount == 3 && buttonBPressCount == 4) {
    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Sending Control");
    lcd.setCursor(0, 1);
    lcd.print("Signal");

    // 在这里调用发送控制信号的函数

    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Sent Control");

    buttonAPressCount = 0; // 重置按钮 A 的按下次数
    buttonBPressCount = 0; // 重置按钮 B 的按下次数

    delay(1000); // 显示发送成功信息 1 秒钟
  }

  // 如果按钮 B 被长按,则发送锁定信号
  if (buttonBState == LOW) {
    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Lock");
    
    // 在这里调用发送锁定信号的函数

    lcd.setCursor(0, 1);
    lcd.print("Locked");
    
    // 等待按钮 B 松开
    while (buttonBState == LOW) {
      buttonBState = digitalRead(buttonBPin);
      delay(10);
    }

    // 如果按钮 B 再次被按下,则发送解锁信号
    if (buttonBState == LOW) {
      lcd.clear(); // 清空 LCD 显示屏
      lcd.setCursor(0, 0);
      lcd.print("Unlock");
      
      // 在这里调用发送解锁信号的函数

      lcd.setCursor(0, 1);
      lcd.print("Unlocked");

      delay(1000); // 显示解锁成功信息 1 秒钟
    }
  }

  // 在这里检测是否接收到远程警告信号,并显示警告信息

  buttonALastState = buttonAState; // 更新按钮 A 的上一次状态
  buttonBLastState = buttonBState; // 更新按钮 B 的上一次状态
}

请将以上代码复制到 Arduino IDE 中,并根据你的实际硬件连接进行适当的调整,然后上传到 Arduino 板上即可。

如果有任何问题或需求,请随时联系我们的技术支持。

谢谢!

来自你的消息:

如何给 ARDUINO 增加远程模块?你建议用什么方法远程遥控这个密码锁?

来自WeTab AI的消息:

要给 Arduino 增加远程模块,你可以选择使用无线通信模块,如无线电频率模块(RF)或蓝牙模块等。这些模块可以使你的 Arduino 与其他设备进行远程通信,实现远程遥控的功能。

在这个密码锁的情况下,使用无线电频率模块可能是一个不错的选择。你可以在 Arduino 上连接一个 RF 模块,并在远程遥控器上放置另一个 RF 模块。通过发送特定的无线电信号,你可以远程控制密码锁的开启和关闭。

以下是给 Arduino 增加远程无线通信模块的一般步骤:

  1. 选择一个合适的无线通信模块:例如,RF 模块(如 NRF24L01)或蓝牙模块(如 HC-05)。
  2. 将模块连接到 Arduino 上:连接模块的 VCC 引脚到 Arduino 的 5V 引脚,GND 引脚到 Arduino 的 GND 引脚,以及模块的数据引脚到 Arduino 的数据引脚(如 SPI 或串口引脚)。
  3. 根据所选模块的规范和通信协议,编写相应的 Arduino 代码来进行无线通信,包括接收和发送数据的功能。
  4. 在密码锁代码中,根据接收到的远程指令,修改锁的状态和行为。

对于远程遥控这个密码锁的方法,你可以创建一个简单的远程控制器,例如使用另一个 Arduino 板进行远程输入。通过连接按钮和相应的无线通信模块,你可以在远程控制器上输入密码,并通过无线传输将密码发送到密码锁的 Arduino 板上。密码锁的 Arduino 板通过验证接收到的密码来控制锁的开启和关闭。

这种方法具有一定的安全性,因为密码不会明文传输在无线信号中,同时增加了远程遥控密码锁的便利性。

请注意,具体的方法和硬件连接可能因所选模块和实际需求而有所不同。建议您仔细阅读所选模块的规范和文档,并参考相应的示例代码和电路图进行实现。

如果您需要更具体的示例代码或有任何问题,请随时联系我们的技术支持。

谢谢!

来自你的消息:

如何用手机控制呢?

来自WeTab AI的消息:

要用手机控制 Arduino,你可以选择使用蓝牙模块或者 Wi-Fi 模块来实现手机和 Arduino 之间的通信。下面我将为你介绍两种常见的方法:

  1. 使用蓝牙模块:

    • 连接一个蓝牙模块(如 HC-06 或 HM-10)到 Arduino。将模块的 VCC 引脚与 Arduino 的 5V 引脚连接,GND 引脚与 Arduino 的 GND 引脚连接,然后将模块的 TX 引脚连接到 Arduino 的 RX 引脚,将模块的 RX 引脚连接到 Arduino 的 TX 引脚。
    • 通过 Arduino 代码,使用软串口库(例如 SoftwareSerial)来与蓝牙模块进行通信。代码中需要实现接收来自手机的指令,并相应地控制密码锁的开启和关闭。
    • 在手机上使用蓝牙串口应用程序,例如 Arduino Bluetooth Controller 或 Bluetooth Terminal,与蓝牙模块进行配对并发送指令给 Arduino。你可以在应用程序中创建一个界面,提供按钮或输入框来发送密码和控制指令给 Arduino。
  2. 使用 Wi-Fi 模块:

    • 连接一个 Wi-Fi 模块(如 ESP8266 或 ESP32)到 Arduino。根据模块的规范,连接相应的引脚(VCC、GND、TX、RX)到 Arduino。
    • 使用 Arduino 代码和相应的库(例如 ESP8266WiFi 和 ESP8266HTTPClient),将 Arduino 与 Wi-Fi 模块连接到无线网络上,并实现与手机的通信。代码需要监听来自手机的请求,并根据请求内容控制密码锁的开启和关闭。
    • 在手机上创建一个基于网络的应用程序,可以使用 HTTP 请求或者 MQTT 协议与 Arduino 进行通信。你可以在应用程序中创建一个界面,提供按钮或输入框来发送密码和控制指令给 Arduino。

这两种方法都能够实现通过手机控制密码锁的功能,选择哪一种方法取决于你的具体需求和所掌握的硬件、软件方面的经验。

希望这些信息对你有所帮助!如果你需要更多的指导或有其他问题,请随时向我提问。

来自你的消息:

你可以给出两个方案的 ARDUINO 密码锁的改进吗? 分别是蓝牙和WIFI。

来自WeTab AI的消息:

当使用蓝牙和 Wi-Fi 来改进 Arduino 密码锁时,可以考虑以下方案:

  1. 改进方案 - 蓝牙模块:

    • 使用 HC-06 或 HM-10 蓝牙模块。
    • 增加一个蓝牙模块专用交互密码,用于验证手机与密码锁之间的通信。
    • 在密码锁的 Arduino 代码中,编写逻辑以接收通过蓝牙模块发送的密码和控制指令,并验证交互密码的正确性。
    • 在手机上使用蓝牙串口应用程序,连接到蓝牙模块,并提供一个用户界面,用于输入密码和发送控制指令。
  2. 改进方案 - Wi-Fi 模块:

    • 使用 ESP8266 或 ESP32 Wi-Fi 模块。
    • 将 ESP8266 或 ESP32 连接到 Wi-Fi 网络,并使用适当的库(如 ESP8266WiFi)通过 HTTP 或 MQTT 协议与手机通信。
    • 在密码锁的 Arduino 代码中,编写逻辑以解析来自手机的 HTTP 请求或 MQTT 消息,根据请求内容验证密码并执行相应的操作。
    • 在手机上创建一个基于网络的应用程序,可以使用 HTTP 请求或 MQTT 协议与密码锁的 Arduino 板进行通信,并提供一个用户界面,用于输入密码和发送控制指令。

无论采用哪种方案,你都可以根据具体需求进行进一步改进。例如,可以添加多重身份验证、安全加密协议、远程访问日志等功能来增加安全性。此外,你还可以设计一个更友好和直观的用户界面,以方便用户操作密码锁。

这些改进方案提供了基本的框架,你可以根据自己的需求和技术要求进行进一步定制和调整。请参考相关模块的文档和示例代码,以确保正确配置和使用。

如果你需要更多的指导或有其他问题,请随时向我提问。祝你成功完成 Arduino 密码锁的改进!

来自你的消息:

分别给出完整的 ARDUINO 代码吧。

来自WeTab AI的消息:

以下是使用蓝牙模块和 Wi-Fi 模块改进 Arduino 密码锁的完整代码示例:

  1. 蓝牙模块方案:
#include <SoftwareSerial.h>

SoftwareSerial bluetoothSerial(2, 3); // 蓝牙模块的 RX, TX 引脚连接到 Arduino 的数字引脚 2, 3

const int password = 1234; // 设定密码

void setup() {
  pinMode(13, OUTPUT); // 设置 LED 引脚
  Serial.begin(9600);
  bluetoothSerial.begin(9600);  
}

void loop() {
  if (bluetoothSerial.available()) {
    int received = bluetoothSerial.parseInt();
    
    if (received == password) {
      digitalWrite(13, HIGH); // 执行密码匹配后的操作
      bluetoothSerial.println("Access granted");
    } else {
      digitalWrite(13, LOW);
      bluetoothSerial.println("Access denied");
    }
    
    bluetoothSerial.flush();
  }
}
  1. Wi-Fi 模块方案:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* ssid = "YourWiFiNetwork";
const char* password = "YourWiFiPassword";

ESP8266WebServer server(80);

void handleRoot() {
  String message = "Welcome to the Arduino password lock server!";
  server.send(200, "text/html", message);
}

void handlePassword() {
  if (server.hasArg("password")) {
    int received = server.arg("password").toInt();
    
    if (received == 1234) {
      // 执行密码匹配后的操作
      server.send(200, "text/html", "Access granted");
    } else {
      server.send(200, "text/html", "Access denied");
    }
  } else {
    server.send(400, "text/html", "Bad Request");
  }
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // 设置 LED 引脚
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  delay(5000);
  
  server.on("/", handleRoot);
  server.on("/password", handlePassword);
  
  server.begin();
}

void loop() {
  server.handleClient();
}

以上代码示例仅提供了基本框架,其中蓝牙模块方案使用了 SoftwareSerial 库,Wi-Fi 模块方案使用了 ESP8266WiFi 和 ESP8266WebServer 库。你需要根据实际情况修改 Wi-Fi 网络的 SSID 和密码,并根据需求进一步优化和调整代码。

请添加适当的硬件连接,例如将蓝牙模块的 VCC、GND、RX、TX 引脚连接到正确的 Arduino 引脚,或将 ESP8266 模块连接到正确的引脚。

希望这可以帮助你实现密码锁的改进!如果你还有其他问题,请随时向我提问。

来自你的消息:

我是叫你给下面的程序,配蓝牙或者WIFI模块代码。

当然可以!以下是用 Arduino 实现相同功能的代码示例:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // 初始化 LCD 显示屏

int buttonAPin = 2; // 按钮 A 的引脚
int buttonBPin = 3; // 按钮 B 的引脚

int buttonAState = HIGH; // 按钮 A 的状态
int buttonBState = HIGH; // 按钮 B 的状态

int buttonALastState = HIGH; // 按钮 A 的上一次状态
int buttonBLastState = HIGH; // 按钮 B 的上一次状态

int buttonAPressCount = 0; // 按钮 A 的按下次数
int buttonBPressCount = 0; // 按钮 B 的按下次数

int cishu = 0; // 计数

void setup() {
  pinMode(buttonAPin, INPUT_PULLUP); // 设置按钮 A 引脚为输入,并启用上拉电阻
  pinMode(buttonBPin, INPUT_PULLUP); // 设置按钮 B 引脚为输入,并启用上拉电阻

  lcd.begin(16, 2); // 初始化 LCD 显示屏
  lcd.backlight(); // 打开背光
  lcd.setCursor(0, 0); // 设置光标位置为第一行第一列
  lcd.print("Remote Control"); // 在 LCD 显示屏上显示标题
}

void loop() {
  buttonAState = digitalRead(buttonAPin); // 读取按钮 A 的状态
  buttonBState = digitalRead(buttonBPin); // 读取按钮 B 的状态

  // 检测按钮 A 是否按下
  if (buttonAState == LOW && buttonALastState == HIGH) {
    buttonAPressCount++; // 增加按钮 A 的按下次数
    cishu++; // 增加计数

    delay(250); // 延迟消除按钮反弹
  }

  // 检测按钮 B 是否按下
  if (buttonBState == LOW && buttonBLastState == HIGH) {
    buttonBPressCount++; // 增加按钮 B 的按下次数
    cishu++; // 增加计数

    delay(250); // 延迟消除按钮反弹
  }

  // 如果计数超过 7 次,则显示错误信息
  if (cishu > 7) {
    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Error");
    cishu = 0; // 重置计数

    delay(5000); // 显示错误信息 5 秒钟
  }

  // 如果按钮 A 按下 3 次,并且按钮 B 按下 4 次,则发送控制信号
  if (buttonAPressCount == 3 && buttonBPressCount == 4) {
    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Sending Control");
    lcd.setCursor(0, 1);
    lcd.print("Signal");

    // 在这里调用发送控制信号的函数

    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Sent Control");

    buttonAPressCount = 0; // 重置按钮 A 的按下次数
    buttonBPressCount = 0; // 重置按钮 B 的按下次数

    delay(1000); // 显示发送成功信息 1 秒钟
  }

  // 如果按钮 B 被长按,则发送锁定信号
  if (buttonBState == LOW) {
    lcd.clear(); // 清空 LCD 显示屏
    lcd.setCursor(0, 0);
    lcd.print("Lock");
    
    // 在这里调用发送锁定信号的函数

    lcd.setCursor(0, 1);
    lcd.print("Locked");
    
    // 等待按钮 B 松开
    while (buttonBState == LOW) {
      buttonBState = digitalRead(buttonBPin);
      delay(10);
    }

    // 如果按钮 B 再次被按下,则发送解锁信号
    if (buttonBState == LOW) {
      lcd.clear(); // 清空 LCD 显示屏
      lcd.setCursor(0, 0);
      lcd.print("Unlock");
      
      // 在这里调用发送解锁信号的函数

      lcd.setCursor(0, 1);
      lcd.print("Unlocked");

      delay(1000); // 显示解锁成功信息 1 秒钟
    }
  }

  // 在这里检测是否接收到远程警告信号,并显示警告信息

  buttonALastState = buttonAState; // 更新按钮 A 的上一次状态
  buttonBLastState = buttonBState; // 更新按钮 B 的上一次状态
}

请将以上代码复制到 Arduino IDE 中,并根据你的实际硬件连接进行适当的调整,然后上传到 Arduino 板上即可。

如果有任何问题或需求,请随时联系我们的技术支持。

谢谢!

来自WeTab AI的消息:

非常抱歉,我在之前的回答中犯了一个错误。我给出的代码示例其实与提问的需求不符合,我混淆了问题的要求。非常抱歉给你带来了困扰。

要实现一个具备蓝牙或 Wi-Fi 功能的 Arduino 程序,需要使用专门的蓝牙模块或 Wi-Fi 模块,并使用相应的库进行通信。在这里,我给你提供修改后的代码示例:

  1. 蓝牙模块方案:
#include <SoftwareSerial.h>

SoftwareSerial bluetoothSerial(2, 3); // 蓝牙模块的 RX, TX 引脚连接到 Arduino 的数字引脚 2, 3

int ledPin = 13; // LED 引脚

void setup() {
  pinMode(ledPin, OUTPUT); // 设置 LED 引脚为输出
  
  Serial.begin(9600);
  bluetoothSerial.begin(9600);
}

void loop() {
  if (bluetoothSerial.available()) {
    char receivedChar = bluetoothSerial.read();
    
    if (receivedChar == '1') {
      digitalWrite(ledPin, HIGH); // 打开 LED
      bluetoothSerial.println("LED ON"); // 向蓝牙设备发送确认消息
    } else if (receivedChar == '0') {
      digitalWrite(ledPin, LOW); // 关闭 LED
      bluetoothSerial.println("LED OFF"); // 向蓝牙设备发送确认消息
    }
  }
}
  1. Wi-Fi 模块方案:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "你的WiFi网络名称";
const char* password = "你的WiFi密码";

// WiFi 服务器的 IP 地址和端口
const char* serverIP = "你的服务器IP";
const int serverPort = 80;

int ledPin = 13; // LED 引脚

WiFiClient client;

void setup() {
  pinMode(ledPin, OUTPUT); // 设置 LED 引脚为输出
  
  Serial.begin(115200);
  delay(10);

  WiFi.begin(ssid, password); // 连接到 WiFi 网络
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    if (client.connect(serverIP, serverPort)) {
      // 向服务器发送请求
      client.println("GET /control?led=1 HTTP/1.1");
      client.println("Host: " + String(serverIP));
      client.println("Connection: close");
      client.println();

      // 等待服务器响应
      while (client.connected()) {
        String line = client.readStringUntil('\n');
        Serial.println(line);

        if (line == "LED ON") {
          digitalWrite(ledPin, HIGH); // 打开 LED
        } else if (line == "LED OFF") {
          digitalWrite(ledPin, LOW); // 关闭 LED
        }
      }

      client.stop();
    }
  } else {
    Serial.println("WiFi not connected");
    delay(5000);
  }
}

请注意,以上代码仅提供了基本的框架,你需要根据实际的蓝牙模块或 Wi-Fi 模块以及网络配置进行进一步的调整和优化。在代码中添加适当的硬件连接以及使用库函数来实现和蓝牙模块或 Wi-Fi 模块的通信。

如果你有任何进一步的问题或需要额外的帮助,请随时向我提问。非常抱歉之前给你带来的困扰,感谢你的理解!

那你可以给出手机端的示范代码吗,控制ARUDINO 的密码锁。

当然可以!以下是一个简单的示例代码,演示如何使用手机端控制 Arduino 的密码锁功能。该示例使用 Node.js 和 Socket.IO 构建了一个简单的服务器端,并使用 Socket.IO 客户端库在手机端与服务器进行通信。

首先,你需要在 Arduino 上连接一个继电器模块,并将密码锁的控制线(例如电磁锁的开关控制线)连接到继电器模块上。接下来,将以下代码保存为 server.js 文件,并在你的计算机上安装 Node.js。

const http = require('http');
const fs = require('fs');
const socketIO = require('socket.io');
const { execSync } = require('child_process');

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
  // 读取并发送 HTML 文件
  const html = fs.readFileSync('index.html', 'utf8');
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end(html);
});

// 启动服务器监听
server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

// 创建 Socket.IO 实例
const io = socketIO(server);

// 处理客户端连接事件
io.on('connection', socket => {
  console.log('A client is connected');

  // 监听客户端发送的开锁事件
  socket.on('unlock', () => {
    console.log('Unlocking...');
    
    // 执行开锁命令
    execSync('python unlock.py'); // 替换成实际的开锁命令

    // 向客户端发送开锁成功事件
    socket.emit('unlock-success');
  });
});

然后,将以下代码保存为 index.html 文件,并放置在与 server.js 文件相同的目录中。

<!DOCTYPE html>
<html>
<head>
  <title>Password Lock Control</title>
  <script src="https://cdn.socket.io/4.4.1/socket.io.js"></script>
  <script>
    const socket = io(); // 连接到服务器

    function unlock() {
      socket.emit('unlock'); // 发送开锁事件
    }

    socket.on('unlock-success', () => {
      alert('Unlock success!'); // 收到开锁成功事件时弹出提示
    });
  </script>
</head>
<body>
  <h1>Password Lock Control</h1>
  <button onclick="unlock()">Unlock</button> <!-- 点击按钮触发开锁事件 -->
</body>
</html>

修改 server.js 中的 execSync('python unlock.py') 部分,替换为适合你的实际开锁命令。确保你的环境中可执行该命令。

运行 server.js 文件,在终端中输入以下命令:

node server.js

然后,在手机浏览器中访问 http://你的计算机IP地址:3000(将 你的计算机IP地址 替换为你的计算机的实际 IP 地址),这将打开一个简单的网页,其中包含一个“Unlock”按钮。当你点击按钮时,它将通过 Socket.IO 与服务器进行通信,并向 Arduino 发送开锁命令。

请注意,以上示例仅提供了基本的框架,你需要根据你的具体硬件连接和需求对代码进行进一步的调整和优化。

希望这能帮到你!如果你有任何进一步的问题,请随时向我提问。

袁德俊 修改了描述
袁德俊 修改了描述

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
5631341 yuandj 1624973227
JavaScript
1
https://gitee.com/zhang-tanyue/siger.git
git@gitee.com:zhang-tanyue/siger.git
zhang-tanyue
siger
SIGer

搜索帮助