RaspberryPi와 discord.py로 쉽게 집 해킹 시작

00 소개



Adkale 기사 의 계속입니다.
RaspberryPi+discord.py로 뭔가 할 수 없을까라고 생각해 보았습니다.
전에 만든 라즈파이 Blynk 리모콘이 라즈파이 측의 부조 (아마 SD 카드)로 죽어 버렸기 때문에 이것을 기회로 할까라고.

01 준비하는 것



기본 부품은 아키즈키 덴쇼 으로 정렬됩니다.
(납땜 인두와 브레드 보드, 점퍼 와이어는 한 전제로 진행하고 있습니다)


품목
가격(엔)


RaspberryPiZeroW(단체)
1,320

적외선 리모컨 수신 모듈 OSRB38C9AA(2개입)
100

적외선 LED OSI5FU5111C-40(5개입)
100

탄소 저항(탄소 피막 저항) 1/4W1kΩ(100개입)
100

탄소 저항(탄소 피막 저항) 1/4W10Ω(100개입)
100

트랜지스터 2SC2120-Y(20개입)
110

근기
시가


02 리모컨의 적외선 학습



먼저 적외선을 수신하기 위해 수신 모듈을 이 표와 같이 연결합니다.


RaspberryPi 쪽
모듈측(수신 부분이 자신을 향하고 있는 상태)


입력용 GPIO
왼쪽

GND
중앙

3.3V
오른쪽


적외선의 교환에 대해서는 Lirc를 하려고 했습니다만, 자신의 방의 환경이 나쁘고, 잘 설정할 수 없었기 때문에, WiringPi를 이용합니다.

이 기사가 도움이되었습니다.
Raspberry Pi의 GPIO를 이용하여 적외선 리모컨 신호를 스캔 및 전송

03 적외선 송신 모듈 만들기




이상과 같이 만들었습니다.
송신용 GPIO 핀은 PWM에 대응하는 핀 번호를 선택하십시오.

04 discord.py로 실행



쉘 스크립트에서 간접적으로 실행하도록 하면 유지보수가 쉽습니다.
파이썬 측의 실행은 subprocess를 사용합니다.

index.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import discord
from discord.ext import commands
import subprocess
from subprocess import PIPE

# DiscordToken
TOKEN = 'Your Token'

# 接続に必要なオブジェクトを生成
client = discord.Client()

# 起動時に動作する処理
@client.event
async def on_ready():
    # 起動したらターミナルにログイン通知が表示される
    print('ready...')

# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
    # メッセージ送信者がBotだった場合は無視する
    if message.author.bot:
        return

    # 照明スイッチ
    if message.content == 'on light':
        # ユーザ選別
        if (str)(message.author) == me_id:
            # ONコマンド
            subprocess.run("[ABSOLUTE PATH]/lightOn.sh",shell=True, text=True)
            await message.channel.send('照明をONにセットしました'+rasp)
        else: # 自分以外のユーザーが操作しようとした時
            await message.channel.send(f'{message.author.mention} 命令権がありません')

# Botの起動とDiscordサーバーへの接続
client.run(TOKEN)

05 systemctl로 상주화


/etc/systemd/system/ 아래에,

discordBot.service
[Unit]
Description=Discord Bot Service

[Service]
ExecStart=pythonファイルの絶対パス
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target

저장하고,
raspberryPi$ sudo systemctl enable discordBot.service # 有効化
raspberryPi$ sudo systemctl start discordBot.service # 開始

을 실행합니다.

이제 bot의 상주화가 가능했습니다.

오류가 발생한 경우 · bot가 시작되지 않는 경우



터미널에서
raspberryPi$ sudo systemctl status discordBot.service

실행하면 로그를 확인할 수 있으므로 오류를 해결합시다.

06 결과



잘하면 Discord의 대화 화면에서 지정한 명령으로 방 조명을 제어할 수 있습니다.
그 외에 에어컨 등도 설정했습니다.
또, Bot명은 좋아하는 캐릭터명을 모았습니다.



아주 좋아. (좋음)

일단 소스 코드는 여기 (github로 날아갑니다)

discord.py는 편리한 프레임 워크가있는 것 같기 때문에 그것을 사용하고 싶었습니다 만, 이전과 비슷한 bot의 소스 코드가 있었기 때문에 유용했습니다.

07 참고 링크



Raspberry Pi의 GPIO를 이용하여 적외선 리모컨 신호를 스캔 및 전송
schemeit
discord.py Document
TV 애니메이션 아이돌 마스터 공식

좋은 웹페이지 즐겨찾기