4
2

More than 3 years have passed since last update.

RaspberryPiとdiscord.pyで簡単おうちハック入門

Posted at

00 はじめに

アドカレ記事の続きです。
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側 モジュール側(受信部分が自分に向いている状態)
input用GPIO
GND 中央
3.3V

赤外線のやりとりに関してはLircをしようとしたのですが、自分の部屋の環境が悪く、うまく設定できなかったので、WiringPiを用います。

こちらの記事が参考になりました。
Raspberry PiのGPIOを利用して赤外線リモコンの信号をスキャン・送信

03 赤外線送信モジュールを作る

スクリーンショット 2020-06-12 2.38.28.png
以上の様に作りました。
送信用GPIOピンはPWMに対応したピン番号を選んでください。

04 discord.pyで実行させる

シェルスクリプトで間接的に実行させるようにすると、メンテが楽です。
python側からの実行は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名は好きなキャラクター名をもじりました。

スクリーンショット 2020-06-12 1.28.10.png

とても良い。(良い)

一応ソースコードはこちら(githubに飛びます)

discord.pyは便利なフレームワークがあるらしいのでそれを使いたかったのですが、前に似た様なbotのソースコードがあったので流用しました。

07 参考リンク

Raspberry PiのGPIOを利用して赤外線リモコンの信号をスキャン・送信
schemeit
discord.py Document
TVアニメ アイドルマスター公式

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2