Raspberry Pi 및 BleuIO를 사용한 스마트폰 제어 홈 자동화
소개
이 예제는 스마트폰(또는 다른 BleuIO Dongle)에서 원격으로 RaspberryPi의 GPIO 핀을 제어하는 방법을 보여줍니다.
이 예에서는 다음이 필요합니다.
경고 – 이 프로젝트에는 심각한 부상이나 사망을 초래할 수 있는 고전압이 포함되어 있습니다. 필요한 모든 예방 조치를 취하고 작업하기 전에 회로의 모든 전원을 끄십시오.
릴레이 연결
주의:
AC를 실험할 때는 항상 매우 조심하십시오. 감전으로 인해 심각한 부상을 입을 수 있습니다! 위험 고지, 책임 부인
bleuio_rpi_switch_example.py에 대한 지침
마지막으로 Python 스크립트를 실행하고 휴대폰을 사용하여 BleuIO Dongle에 연결하고 온/오프 메시지를 보내 GPIO를 제어하십시오!
모바일에서 BleuIO에 연결하기 위한 지침
이제 서버 RX 데이터 특성(UUID: 0783b03e-8535-b5a0-7140-a304d2495cba)에 기록하여 GPIO를 제어할 수 있습니다.
|CMD|효과|
|–|–|
|"SW=1"| 켜짐|
|"SW=0"| 끄기|
스크립트
다음은 스마트폰 앱에서 메시지를 수신하고 조명을 제어하는 데 도움이 되는 Python 스크립트입니다.
#!/usr/bin/python3
# Copyright 2022 Smart Sensor Devices in Sweden AB
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import time
import serial.tools.list_ports
import serial
import RPi.GPIO as io
switch = 7 # Edit this to suit your setup! (7 = GPIO 04), use command pinout to graphically show you the GPIO pins for the board
io.setmode(io.BOARD)
io.setup(switch, io.OUT)
master_array = []
index = 1
dongle_port = ""
print("\nWelcome to BleuIO RaspberryPi Switch Example!\n")
print("\nPlease insert dongle...")
try:
while len(master_array) == 0:
m_ports = serial.tools.list_ports.comports(include_links=False)
for port in m_ports:
if str(port.hwid).__contains__("VID:PID=2DCF"):
master = port.device + " " + port.hwid
if master.__contains__("VID:PID=2DCF:6002"):
print("Found dongle in port: %s" % port.device)
master_array.append(master)
dongle_port = port
break
for dongle in master_array:
print("\nConnecting to BleuIO @ %s\n" % dongle)
time.sleep(0.5)
dongle_conn = serial.Serial(
dongle_port.device,
115200,
timeout=1,
)
if not dongle_conn.is_open:
dongle_conn.open()
print("Starting Advertising...")
dongle_conn.write("AT+GAPDISCONNECTALL\rAT+DUAL\rAT+ADVSTART\rATI\r".encode())
read_tries = 0
dongle_resp = ""
while read_tries < 20:
dongle_resp = dongle_conn.readline().decode()
if "Not Advertising" in dongle_resp:
dongle_conn.write("AT+ADVSTART\r")
if b"Advertising\r\n" in dongle_resp.encode():
break
read_tries += 1
time.sleep(0.01)
if dongle_resp:
print("BleuIO is %s" % dongle_resp)
else:
print("ERROR! No response...")
exit()
print(
"Going into loop, waiting for signal to turn switch on/off...\n(Press Ctrl+C to abort)"
)
while True:
try:
dongle_resp = dongle_conn.readline().decode()
if "SW=0" in dongle_resp:
print("Turn Switch off!")
io.output(switch, io.LOW)
if "SW=1" in dongle_resp:
print("Turn Switch on!")
io.output(switch, io.HIGH)
except KeyboardInterrupt:
if dongle_conn.is_open:
dongle_conn.write("AT+GAPDISCONNECTALL\rAT+ADVSTOP\r".encode())
dongle_conn.close()
io.cleanup()
print("\nBye!")
exit()
except Exception as e:
print("(ERROR: %s)" % (e))
산출
우리는 전구를 켜고 끄기 위해 IOS 및 Android 전화 모두에서 nRFConnect 앱을 사용하여 스크립트를 테스트했습니다. 다음은 이 프로젝트의 출력입니다.
Reference
이 문제에 관하여(Raspberry Pi 및 BleuIO를 사용한 스마트폰 제어 홈 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bleuiot/smart-phone-controlled-home-automation-using-raspberry-pi-and-bleuio-1c6c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)