TentoBug が 2024年10月31日21時28分31秒 に編集
コメント無し
本文の変更
はじめに IoTを活用した竹とんぼの発射台を作ろうと思って出発しましたが、いまひとつな出来となりました。その記録です。色々と解決しないとダメな課題が残っています。 使い方としましては、パソコンで任意の名前のSSIDに接続して、ブラウザで任意のアドレスに接続します。「26 ON」を押すことで竹トンボが飛ぶ感じです。 こうすることで、いまひとつなプログラムや竹とんぼや発射台から安全な位置で眺めることができると考えたからです。 部品 | 部品名 | 型番 | |:---:|:---| | メインデバイス | Pico-W | | 反射型フォトセンサ | RPR-220 | | モーター | RE-140RA | 設計図 ![キャプションを入力できます](https://camo.elchika.com/73f6432994967bb1b298a10f1f226122c463e14f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f36386239313464382d336362362d346436302d396339382d646132353135393562333032/) 定格電流などの確認ができていません。 3Dプリンタで印刷します。
![キャプションを入力できます](https://camo.elchika.com/15351ea69fe08126893ea638f836310ad870dcde/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f38303062366430372d343432322d343962372d613739362d306432383863373435663131/) 一番下にモータをつけて、バイスで固定します。
![キャプションを入力できます](https://camo.elchika.com/61e6d7a7099efd0396d9d8749a5984d7e5f886c5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f36373235383037312d333662632d343264322d613361632d326361666635346633363035/) ![キャプションを入力できます](https://camo.elchika.com/6c32d1815c4310f09259a987942f029330a78d41/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f31323665336138352d316532392d343839622d383362302d656664356539666237616263/) ![キャプションを入力できます](https://camo.elchika.com/c128d3a4d1844e2fc4719b53857224c6820b5933/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f62343363386239372d363762302d346564662d393635352d373735396462663431353330/) ⑤の下にモータをつけて、バイスで固定します。
![キャプションを入力できます](https://camo.elchika.com/1bda28dd2300e0545313da424bf6863b87c199e8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f38636163626364382d633333612d343065332d386632382d663464643633613164666164/)
穴に爪楊枝を刺して、長さを調整します。 ![キャプションを入力できます](https://camo.elchika.com/b3244300576e8c60e0129d1dc081c53997022fab/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f34376363663039332d663266352d343665662d396231632d303532613862653163626461/) ソースコード ```:不安定版main.py import sys import network import socket #import machine from machine import Timer from machine import Pin from machine import ADC from utime import sleep_ms from utime import sleep_us lis=[] usec=[20] t0=Timer() t1=Timer() def func(t): ad27=adc.read_u16()/ 65535.0*100.0 if len(lis)>4095: lis.pop(0) lis.append(ad27) sleep_ms(1) def motor(t): g26.value(1) sleep_us(usec[0]*250) g26.value(0) SSID= 'shimako' PASSWORD = 'museum_library' IP = '192.168.4.50' #ピンの設定 g26=Pin(26,Pin.OUT) led = Pin("LED", Pin.OUT) adc = ADC(27) g26.value(0) led.value(1) wlan = network.WLAN(network.AP_IF) sleep_ms(500) wlan.config(ssid=SSID,password=PASSWORD) sleep_ms(500) wlan.active(True) sleep_ms(500) wlan.ifconfig((IP,'255.255.255.0','','8.8.8.8')) #ゲートウェイ、DNSを省略? sleep_ms(500) led.toggle() sleep_ms(500) led.toggle() # IPアドレス設定できたかな? while wlan.status() != network.STAT_GOT_IP: sleep_ms(500) led.toggle() sleep_ms(500) led.toggle() status = wlan.ifconfig() #PICO Wの割り当てられているIPアドレスの表示 print( status[0] ) #ソケットsをアドレスaddrに紐づける addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] #??? sleep_ms(500) led.toggle() s = socket.socket() sleep_ms(500) led.toggle() try: s.bind(addr) #エラー処理が欲しい。 OSError: [Errno 98] EADDRINUSE except OSError as e: if e.errno==98: sleep_ms(100) else: print(e) #led.value(1) #sys.exit(0) except Exception as e: print(e) #led.value(1) #sys.exit(0) #s.settimeout(1.0) sleep_ms(500) led.toggle() s.listen(1) #接続可能数 sleep_ms(500) led.toggle() sleep_ms(500) led.toggle() sleep_ms(500) led.value(0) #5秒後 html1 = """<!DOCTYPE html> <html lang="ja"> <head> <title>モータ制御 0.2</title> <meta charset="UTF-8" /> <meta http-equiv="refresh" content="5; URL="> </head> <body><h1>設定</h1> <form method="GET" action=""> <button type="submit" name="button" value="0">26 ON</button> <button type="submit" name="button" value="1">26 OFF</button> <button type="submit" name="button" value="2">-</button> <button type="submit" name="button" value="3">+</button> </form> <br/> """ html2 = """ </body> </html> """ kaisu=1 #タイマーの初期化 ms t0.init(period=10, callback=func) #t1.init(period=10, callback=motor) #パソコンのブラウザからPICO Wに接続された時の処理 #print("--- wait ---") while True: jyushin="" try: #print("--- p11 ---") cl, addr = s.accept() sleep_ms(100) except OSError as e: #OSError: [Errno 110] ETIMEDOUT print(e.errno) if e.errno!=110: break #s.close try: #print(addr) jyushin=str(cl.recv(256),"utf-8") kaishi=0 kaishi=jyushin.find('button=') if kaishi !=-1: sleep_ms(1) #print(jyushin[kaishi+7:15] #GET /?button=2 HTTP/1.1 if( int(jyushin[kaishi+7:15])==0 ): t1.init(period=5, callback=motor) #10 elif int(jyushin[kaishi+7:15])==1 : t1.deinit() elif int(jyushin[kaishi+7:15])==2 : if usec[0]<=0: usec[0]=0 else: usec[0]-=1 elif int(jyushin[kaishi+7:15])==3 : if usec[0]>=40: usec[0]=40 else: usec[0]+=1 cl_file = cl.makefile('rwb', 0) sleep_ms(1) while True: line = cl_file.readline() if not line or line == b'\r\n': break cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') cl.send(html1) cl.send(str(usec[0]) + '</br>') cl.send('<svg width="500" height="150"><polyline points="') #x,y for x in range(0,len(lis),1): cl.send( str(x)+ ',' + str(100.0-lis[x])) if x!=len(lis)-1: cl.send(',') cl.send('" fill="none" stroke="black"/></svg>') #for x in range(0,len(lis),1): # cl.send(str(lis[x])+',') # if (x%10)==9: # cl.send('<br>') cl.send(html2) cl.close() kaisu=kaisu+1 lis.clear() sleep_ms(1) except: led.value(1) print('dame dame') sys.exit(0) led.value(1) ``` 参考資料 公式ページなど