TentoBug が 2024年11月04日22時04分23秒 に編集
11月10日には挑戦したいな。
本文の変更
***はじめに*** IoTを活用した竹とんぼの発射台を作ろうと思って出発しましたが、いまひとつな出来となりました。ローカルな環境ですら、うまくつながらない。飛ぶというより・・・。その記録です。色々と課題が残ってしまいました。 使い方としましては、パソコンで任意の名前のSSIDに接続して、ブラウザで任意のアドレスに接続します。「26 ON」を押すことで竹トンボが飛ぶ予定でした。 こうすることで、いまひとつなプログラムや竹とんぼや発射台を安全な位置で眺めることができます。 ***部品*** | 部品名 | 型番 | |:---:|:---| | メインデバイス | Pico-W | | 反射型フォトセンサ | RPR-220 | | モーター | RE-140RA | | 歯車 小| m=0.5 10歯 | | 歯車 大| m=0.5 50歯 | ***設計図***  実験ではVSYSに3.6V。ダイオードついているからいいのかな。USB接続で、VSCODEでRUNしました。 定格電流などの確認ができていません。 3Dプリンタで印刷します。   ⑨の羽根の穴に爪(竹)楊枝(φ2ぐらい)を刺して、爪(竹)楊枝の長さを調整します。  ④の歯車にシャフトを付けます。⑤の板をつけます。⑥の円柱をつけます。 ⑤の歯車の下にモータをつけます。 
次は⑥の部品を開くようにしようと思い図面を作成してみました。飛ぶかな。はめ合いが難しそうなので、竹楊枝にマスキングテープを貼って調整しようと思います。 
***ソースコード*** ```:不安定版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=[30] 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) ``` 参考資料 公式ページなど