こんにちは、読者の皆様。
私は長い間Arduinoに興味があり、この素晴らしいプラットフォームを購入することに決めました。 短い検索の後、私は小さなArduinoキットを購入しました。これには、とりわけIRセンサーとリモートコントロールが含まれていました。 マニュアルの例を勉強して、自分の何かを考え出す時だと気づきました。 最終的に、ArduinoとPython3の魔法を使用してVLCプレーヤーをリモートで制御することにしました。
Arduinoマジック
接続図とスケッチは、メーカーのウェブサイトからダウンロードしたArduinoキットのマニュアルから変更することなく、正直に撮影されています。

スケッチ #include <IRremote.h> int RECV_PIN = 7; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value,HEX); // print received values irrecv.resume(); // Receive the next value } }
その結果、押されたキーのコードがポートモニターに届きます。 経験的に、異なるIRリモートが適切であることがわかりました。 これはよく知られた事実ですが、私にとっては新しいことでした。 しかし、それはもっと面白いです。 VLCメディアプレーヤーには、便利なWebベースのインターフェイスがあります。 また、次の形式の通常のhttp-getリクエストを使用して管理できます。
「 ホスト :port / page.html?Var = value&var2 = value2&...」詳細については、
videolan.orgをご覧ください 。
Python3マジック
Python3とそのリッチライブラリを使用して、httpリクエストを送信したり、シリアルポートからデータを読み取ったりすることができます。 それは私の考えを実現するのに十分でした。 Python3スクリプトは、OOPアプローチを使用して記述されています。
簡単に言うと、スクリプトの動作は次のとおりです。
1. vlc_remote_contolクラスのインスタンスを作成し、Vlcプレーヤーのアドレス、キーコードのリスト、および仮想comポートの名前をコンストラクターに渡します。
2.キーコードがポートから読み取られるコントロールメソッドを呼び出します。
3.キーコードは__switch_buttonメソッドに渡されます。 ここで、__ commandメソッドは特定のパラメーターで呼び出されます
4. __commandはVLCプレーヤーに直接get要求を行います。
スクリプト import getpass import time import subprocess import requests import serial import sys import lxml.etree as etree class vlc_remote_contol: def __init__(self,hst,blist,pname): self.host = hst self.btn_list = blist self.port = serial.Serial(pname, 9600, timeout = 0) self.__sess = requests.Session() self.__sess.auth = ('',getpass.getpass()) self.old_vol = self.__get_param(self.__sess.get(self.host+'/requests/status.xml').text, 'volume') self.curr_vol = 0 def __get_param(self,info,param): beg = info.find('<'+param+'>')+len('<'+param+'>') end = info.find('</'+param+'>') return int(info[beg:end]) def __command (self,host,comm,val): if (val == ''): req = self.__sess.get(host+'/requests/status.xml'+'?'+'command='+comm) else: req = self.__sess.get(host+'/requests/status.xml'+'?'+'command='+comm+'&val='+val) req.close() def __switch_button(self,btn_code): if (btn_code == 'FFC23D'):
おわりに
私は、オリジナルで新しいものを思い付かなかったことを理解しています。 これは、大学での実験室作業とオリンピアードの問題の解決しかなかった、産業プログラミングの私の最初の経験です。 コミュニティからの建設的な批判と、スクリプトを改善するためのヒントを楽しみにしています。 これまでのところ、計画はconfig.xmlファイルにキーコードを追加することです。これは、他のリモート、および場合によってはシンプルなグラフィカルインターフェイスを使用することでした。
すべてのソースは
GitHubで公開され
ています 。