編集履歴一覧に戻る
TentoBugのアイコン画像

TentoBug が 2024年10月31日22時28分42秒 に編集

コメント無し

本文の変更

***はじめに***

-

 IoTを活用した竹とんぼの発射台を作ろうと思って出発しましたが、いまひとつな出来となりました。ローカルな環境ですらうまくつながらない。飛ぶというより・・・。その記録です。色々と解決すべき課題が残ってしまいました。

+

 IoTを活用した竹とんぼの発射台を作ろうと思って出発しましたが、いまひとつな出来となりました。ローカルな環境ですらうまくつながらない。飛ぶというより・・・。その記録です。色々と課題が残ってしまいました。

 使い方としましては、パソコンで任意の名前のSSIDに接続して、ブラウザで任意のアドレスに接続します。「26 ON」を押すことで竹トンボが飛ぶ予定でした。  こうすることで、いまひとつなプログラムや竹とんぼや発射台を安全な位置で眺めることができます。 ***部品*** | 部品名 | 型番 | |:---:|:---| | メインデバイス | Pico-W | | 反射型フォトセンサ | RPR-220 | | モーター | RE-140RA | ***設計図*** ![キャプションを入力できます](https://camo.elchika.com/73f6432994967bb1b298a10f1f226122c463e14f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f36386239313464382d336362362d346436302d396339382d646132353135393562333032/) 定格電流などの確認ができていません。 3Dプリンタで印刷します。 ![キャプションを入力できます](https://camo.elchika.com/61e6d7a7099efd0396d9d8749a5984d7e5f886c5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f36373235383037312d333662632d343264322d613361632d326361666635346633363035/) ![キャプションを入力できます](https://camo.elchika.com/6c32d1815c4310f09259a987942f029330a78d41/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f31323665336138352d316532392d343839622d383362302d656664356539666237616263/) ![キャプションを入力できます](https://camo.elchika.com/c128d3a4d1844e2fc4719b53857224c6820b5933/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f62343363386239372d363762302d346564662d393635352d373735396462663431353330/) ⑤の下にモータをつけて、バイスで固定します。 ![キャプションを入力できます](https://camo.elchika.com/01a2bd4ff40a71f395ea9b6a9f89fc3c9101df5e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32376136643031662d356135312d346338322d616134302d3338313839323334376536342f36333933353631642d613732662d346630662d386339662d396262626330346466343962/) 穴に爪楊枝を刺して、長さを調整します。 ![キャプションを入力できます](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) ``` 参考資料 公式ページなど