ブログだいちゃん

ブログだいちゃん

趣味のブログ

ブログだいちゃん

スイッチボットのようなものを作ってみた

台風14号が通過した後めっきり涼しくなってきました、今後も何個かの台風が来るのでしょうね被害が無いよう願いたい物です。

さて、スイッチボット という製品がAmazonなどでベストセラーになっていますね、スマフォなどで電化製品の電源の入り切りや照明のスイッチを操作出来る以下のような物です。


活用範囲が広くいろいろな所に使えそうだし、機能を限定すれば自作も可能なようなので作ってみることにしました。
今回は ESP8266 に MicroPython のファームウエアをインストールして作成します。


MicroPython ファームウエアを ESP8266 にインストールし、WebServerを構築する。

uPyCraft IDE のインストール

micropythonをESP8266にインストールするにはuPyCraft IDEを使用すると簡単にできますのでインストールしておきます、この記事にインストール方法が書かれています、ファームウエアをインストールした後は 使い慣れた Thorry などでプログラミング出来ます。

randomnerdtutorials.com

ESP8266 に MicroPython ファームウエアのインストール とウエブサーバー化

ファームウエアのインストール方法と、MicroPythonを使用し ESP8266 をウエブサーバー化する方法が書かれています、これを利用して自作スイッチボットを動かします。

randomnerdtutorials.com

自作スイッチボットのプログラムコードと回路図


上記の参考サイトにプログラムコードが書かれていますので、このコードにサーボの動作部分を追加してスイッチ操作を行います。

何に使うか

このスイッチボットを使う機器を考えた結果、ファンヒーターの電源と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 電池の大きさがネックですね、リチウムポリマー電池を使用すると小型化できそうです。

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


動作動画


動作確認しました、サーボの動作量の微調整はまだ必要ですが一応操作は出来ています。

ファンヒーターを使用するには時期尚早ですが自作スイッチボットが活躍しそうです。v(*^_^*)v



www.youtube.com