台風14号が通過した後めっきり涼しくなってきました、今後も何個かの台風が来るのでしょうね被害が無いよう願いたい物です。
さて、スイッチボット という製品がAmazonなどでベストセラーになっていますね、スマフォなどで電化製品の電源の入り切りや照明のスイッチを操作出来る以下のような物です。
活用範囲が広くいろいろな所に使えそうだし、機能を限定すれば自作も可能なようなので作ってみることにしました。
今回は ESP8266 に MicroPython のファームウエアをインストールして作成します。
主な使用材料
WemosD1 Mini : 動作実験用に小型のこれを選択
サーボ:MG90Sパチ物ですが使えます
昇圧モジュール:3.7V を 5V に昇圧するのに使います
リチウムイオン電池:18350×2本並列接続で使います
MicroPython ファームウエアを ESP8266 にインストールし、WebServerを構築する。
uPyCraft IDE のインストール
micropythonをESP8266にインストールするにはuPyCraft IDEを使用すると簡単にできますのでインストールしておきます、この記事にインストール方法が書かれています、ファームウエアをインストールした後は 使い慣れた Thorry などでプログラミング出来ます。
ESP8266 に MicroPython ファームウエアのインストール とウエブサーバー化
ファームウエアのインストール方法と、MicroPythonを使用し ESP8266 をウエブサーバー化する方法が書かれています、これを利用して自作スイッチボットを動かします。
自作スイッチボットのプログラムコードと回路図
上記の参考サイトにプログラムコードが書かれていますので、このコードにサーボの動作部分を追加してスイッチ操作を行います。
何に使うか
このスイッチボットを使う機器を考えた結果、ファンヒーターの電源と3時間延長ボタンの操作に決めました。
寒い時期に、手の届かない場所にあるファンヒーターの操作をコタツから出て行うのは億劫ですよね、コタツの脚はしっかり掴んでいたいものです。
プログラムコード
素人が作ったプログラムですので間違いがあるかも知れません自己責任でよろしく。
boot.py
# Complete project details at https://RandomNerdTutorials.com try: import usocket as socket except: import socket from machine import Pin,PWM from utime import sleep import network import esp esp.osdebug(None) import gc gc.collect() ssid = 'My_SSID' password = 'My_Password' station = network.WLAN(network.STA_IF) station.active(True) station.connect(ssid, password) while station.isconnected() == False: pass print('Connection successful') print(station.ifconfig()) led = Pin(2, Pin.OUT) sg90 = PWM(Pin(0)) sg90.freq(50) # サーボの角度は適宜調整する kakudo_0 = 65 # kakudo_0:サーボ水平位置 on_off = 90 extension = 40 sg90.duty(kakudo_0)
main.py
# Complete project details at https://RandomNerdTutorials.com def web_page(): if led.value() == 1: gpio_state="ON_OFF" else: gpio_state="+3H" html = """<html><head> <title>ESP Web Server</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="data:,"> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;} h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;} .button2{background-color: #4286f4;}</style></head><body> <h1>ESP Web Server</h1> <p>GPIO state: <strong>""" + gpio_state + """</strong></p><p><a href="/?led=on"><button class="button">ON_Off</button></a></p> <p><a href="/?led=off"><button class="button button2">3H_Extension</button></a></p></body></html>""" return html s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('', 80)) s.listen(5) while True: conn, addr = s.accept() print('Got a connection from %s' % str(addr)) request = conn.recv(1024) request = str(request) print('Content = %s' % request) led_on = request.find('/?led=on') led_off = request.find('/?led=off') if led_on == 6: print('LED ON') led.value(0) # WemosD1 Mini はLowで点灯 sg90.duty(on_off) sleep(.7) sg90.duty(kakudo_0) if led_off == 6: print('LED OFF') led.value(1) sg90.duty(extension) sleep(.7) sg90.duty(kakudo_0) response = web_page() conn.send('HTTP/1.1 200 OK\n') conn.send('Content-Type: text/html\n') conn.send('Connection: close\n\n') conn.sendall(response) conn.close()
回路図
回路図の電池は18650の直列ですが 18350の並列接続です、電源表示用LEDは直径3mmを使用しています。
作成
ケースは3Dプリンターで作成しました、大きさは 70×60×40 mm 電池の大きさがネックですね、リチウムポリマー電池を使用すると小型化できそうです。


出来上がったスイッチボットのようなものです、ファンヒーターにはベルクロで貼り付けました。


※ 使用ブラウザが「Chrome」の場合時間が経つとサーバーがダウンするようです、このような現象が起きた場合はブラウザを「Firefox」などに換えて下さい。
動作動画
動作確認しました、サーボの動作量の微調整はまだ必要ですが一応操作は出来ています。
ファンヒーターを使用するには時期尚早ですが自作スイッチボットが活躍しそうです。v(*^_^*)v