Тёмный

【ラズパイPico】ネットワーク機能を実装してみた!! WebClientやHTTPリクエスト(GET/POST)によるAPIの利用が可能です! 

社畜商会
Подписаться 9 тыс.
Просмотров 13 тыс.
50% 1

ラズパイPicoとCircuitPythonを使ってネットワーク機能を実装してみました。DHCPでのIPアドレス自動取得から始まり、HTTPのWebクライアント機能やGET/POST通信も可能です。これでラズパイPicoをIoTデバイスとして活用することができるようになりました。
※MOSI/MISOのMaster/Slave呼称について
MOSIは一般的にはMaster Out Slave Inの略とされていますが、昨今ではMaster/Slaveという単語が人権上好ましくないと判断される傾向にあります。
そのため当動画でもMaster/Slaveという言葉を避け、Adafruit社 ( CircuitPython ) での定義に準拠してMicrocontroller/Sensorという単語を使用しています。
---
■CircuitPython & Wiznet W5500の解説ページ
learn.adafruit...
■CircuitPython(Pico用)のダウンロードページ
circuitpython....
■CircuitPythonライブラリのダウンロードページ
github.com/ada...
■CircuitPython & ラズパイPicoの仕様紹介ページ
learn.adafruit...
■CO2センサー製作動画
• 【ラズパイ】ラズパイで二酸化炭素濃度測定器を...
■Nature Remo
nature.global/

Опубликовано:

 

19 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 25   
@嬰徳寺韻太郎
@嬰徳寺韻太郎 2 года назад
すばらしい!これで、PICO が使えるものになりました。 さっそく HTTP で親サーバーと通信するソフトが出来ますね。 僕は火災警報器を Raspberry PI Zero + ADコンバーター+煙センサーで作って いたんですが、PICO でも火災警報器が出来ますね。
@Shartick
@Shartick 2 года назад
おお、火災報知器ですか。素晴らしいですね。 汎用性や使いやすさはZeroに軍配が上がるのですが、アナログ変換が必要なので一長一短なんですよね。 Picoがようやく安定してネットワーク接続ができるようになったので、使い道がかなり広がりそうです!
@gordon3763
@gordon3763 3 года назад
めちゃくちゃ勉強になります!pico関連の動画で一番分かりやすいです! もし機会があれば自作タッチセンサーの動画も載せてください!日本語の動画がないです>_< 次回も楽しみにしてます!
@Shartick
@Shartick 3 года назад
コメントありがとうございます!!とても嬉しいです。 今後も仕事が落ち着いたらバンバンPico関連の動画を投稿していきますのでよろしくお願いします!🙇
@essasa
@essasa 2 года назад
picoをもらったので検索な海をさまよい、ここにたどり着きました。ネットワークにつなげるなんて一気に夢が広がってワクワクしてきました。DNS通信してみたいです。
@Shartick
@Shartick 2 года назад
コメントありがとうございます。 Picoがネットワークに繋がるようになれば可能性がかなり広がりますね! WiFi接続できれば最高なのですが、こちらはまだ研究中なのでやり方が分かり次第動画にしたいと思います。
@玉井秀成-j4m
@玉井秀成-j4m 3 года назад
とてもためになりました、面白かったです!ありがとうございました。 これでセンサーデータをトリガーにした送信、が出来ることが分かりました。 この逆、親となるマシンがあったとして、そこから指示を受けてpicoのプログラム(関数)を発動させたい場合は、どんな通信が良いのでしょうか。 つまり受信です。 これもLANでいけるのでしょうか。 picoじゃないのかもしれませんが。。 そしてデスマ、お身体に気をつけてがんばってください
@Shartick
@Shartick 3 года назад
こちらこそご視聴、コメントありがとうございます!何とかデスマを生き延びて頑張って次の動画を作ります。 ご質問いただいた件ですが、 ①マシン同士で通信する場合、今回取り上げたCircuitPythonのライブラリにはTCP/IPが実装されているので、親マシンとPico間でソケット通信をしてトリガーとするのが順当だと思います。 micropython-docs-ja.readthedocs.io/ja/latest/esp8266/tutorial/network_tcp.html しかし、私はネットワーク周りをがっつり実装した経験がないので具体的にどうすればいいか分かりません。 ②代替案として、下記ライブラリのページに書いてあるサンプル(2つ目)をベースに実現可能かもしれません。 github.com/adafruit/Adafruit_CircuitPython_Wiznet5k#usage-example これはPicoをWebサーバーとして待ち受けさせて、親マシンから特定のURLにGETリクエストが来た時に発動するものだと思います。通信がHTTPで完結するのである意味シンプルに作れそうです。 実際に試せていないので上手くいくかは分からないのが申し訳ないのですが…時間が取れたら試してみます!(時間が取れたら…!)
@sniffbrown
@sniffbrown 3 года назад
こんにちはいつも楽しく拝見させていただいております。 お手すきになったら、ESP32とPicoを組み合わせてPicoの無線LAN化をお試しいただけないでしょうか?
@Shartick
@Shartick 3 года назад
いつもご視聴本当にありがとうございます。 Picoで無線LANはいつか実現したいと思っていますので、うまく行った暁には必ず動画で紹介します! (ちょっと調べてみた所、実現できそうな情報が見つかったので近いうちに頑張ってみます)
@hiroshiyamauchi-v3d
@hiroshiyamauchi-v3d Год назад
ウェアラブル点字デバイスできますか?指点字マシーンですチャットとか通知メッセージを指点字で読み取りたいですeps32を使って指先のモーターを動かして目と耳に障害がある人のために作っていたらけないでしょうか
@山田武-n8s
@山田武-n8s 3 года назад
最近ピコも供給が増えてきたみたいですね。 御一人様200枚までOKになってました。 買ったのはゼロWですが カリを入れたけどちょっともっさり
@Shartick
@Shartick 3 года назад
もう200枚までOKになりましたか!供給安定していつでも手に入りそうですね。よかったです。 ゼロWもなかなか遊べるのですがデスクトップ的な使い方をするにはちょっと厳しいですよね。工夫のし甲斐があって面白いです。
@ぺんぺん-y5y
@ぺんぺん-y5y 3 года назад
MISOはMaster In Slave Out だと思います。 MOSIも
@Shartick
@Shartick 3 года назад
一般的にはMaster/Slaveを使いますよね。 この動画ではCircuitPython内での呼称に準拠してMicrocontroller/Sensorを使用しています(昨今の人権問題への取り組みでしょうね)。 蛇足になると思い動画内では言及しなかったのですが、紛らわしいので概要欄に追記しておきます。ご指摘ありがとうございます。
@ぺんぺん-y5y
@ぺんぺん-y5y 3 года назад
@@Shartick そうなんですね。 蛇足でしたねすみません、、
@Shartick
@Shartick 3 года назад
いえいえとんでもないです!コメントありがとうございます〜😆
@0xdeadbeef131
@0xdeadbeef131 3 года назад
ラズパイでVGA出力やって欲しい
@Shartick
@Shartick 3 года назад
リクエストありがとうございます。いいですね〜VGA出力! 確か以前Twitterで試していた人がいたはずなので探してみます!
@Tもちぐち
@Tもちぐち 2 года назад
ラズパイpicoのみを購入したのですがmoduleをインストールすることができません。 ラズパイpicoにrpi.gpioのmoduleを導入することはできますか? プログラミングしてみたところno named module error rpi となるので…
@Shartick
@Shartick 2 года назад
公式のMicroPythonを使っていますか? もしよろしければ、動かそうとしているコードを貼っていただければこちらでも動かしてみます!
@Tもちぐち
@Tもちぐち 2 года назад
@@Shartick 他にも多くの問題はあるかと思いますが、こちらがコードです。環境構築は動画を参考にしております。 import RPi.GPIO as GPIO #GPIO用のモジュールをインポート import time #時間制御用のモジュールをインポート import machine #電圧測定用のモジュールをインポート import utime #タイムモジュールをインポート import reading #7segの数字数字に全て関数付けする #7セグLED A(7番ピン) :GPIO16 :ジャンパ線 白 #7セグLED B(6番ピン) :GPIO20 :ジャンパ線 黄 #7セグLED C(4番ピン) :GPIO19 :ジャンパ線 青 #7セグLED D(2番ピン) :GPIO27 :ジャンパ線 黄 #7セグLED E(1番ピン) :GPIO17 :ジャンパ線 白 #7セグLED F(9番ピン) :GPIO23 :ジャンパ線 オレンジ #7セグLED G(10番ピン) :GPIO18 :ジャンパ線 青 #7セグLED DP(5番ピン) :GPIO26 :ジャンパ線 オレン #GPIOの設定 GPIO.setmode(GPIO.BCM) #GPIOのモードを"GPIO.BCM"に設定 GPIO.setup(seg_pin, GPIO.OUT) #GPIO(8ヶ)を出力モードに設定 seg_pin = [#A, B, C, D, E, F, G, DP 16, 20, 19, 27, 17, 23, 18, 26] #変数"seg_pin"にリストを格納 ポート番号を変更の際はここを seg_0 = [ #A, B, C, D, E, F, DP 16, 20, 19, 27, 17, 23, 26] #0のために中心のG以外点灯 seg_1 = [ #B, C, DP 20, 19, 26] seg_2 = [ #A, B, D, E, G, DP 16, 20, 27, 17, 18, 26] seg_3 = [ #A, B, C, D, G, DP 16, 20, 19, 27, 18,26] seg_4 = [ #B, C, F, G, DP 20, 19, 23, 18, 26] seg_5 = [ #A, C, D, F, G, DP 16, 19, 27, 23, 18, 26] seg_6 = [ #A, C, D, E, F, G, DP 16, 19, 27, 17, 23, 18, 26] seg_7 = [ #A, B, C, DP 16, 20, 19, 26] seg_8 = [ #A, B, C, D, E, F, G, DP 16, 20, 19, 27, 17, 23, 18, 26] seg_9 = [ #A, B, C, F, G, DP 16, 20, 19, 23, 18, 26] seg_10 =[ #G, DP 18, 26] #error判別用の中央点灯 #sensor_temp = machine.ADC(4) sensor_temp = machine.ADC(0) #センサーがADCに接続され、値を読み取れるようにする conversion_factor = 3.3 / (65535) #この数式はADCで読み取った値を変換するための計算、ADCが16bitの値で帰ってくるため2の12乗で割っている。3.3VをかけることでADCの読み取り値を0V~3.3Vに対応させている while True: #繰り返しさせるための式 繰り返しできない場合はここをfor文にする? X = 0 #表示させるためのXの初期化 O = 8 P = 4 Q = 2 R = 1 num = 0 reading = sensor_temp.read_u16() * conversion_factor all = sum(all,reading) utime.sleep_ms(1) #1ミリ秒の遅延を発生させる if N < reading: #読み取った値に平均がNより大きい場合 Nに実数を入力 X += O #4桁目の正負の判断 else : #上記の否定(読み取った値がXより小さい場合) O = 0 #4桁目の正負の判断 X += O #XとOを足す、二進数4桁目は8のため utime.sleep(1) #1秒の遅延を発生させる if N < reading: #読み取った値に平均がNより大きい場合 Nに実数を入力 X += P #4桁目の正負の判断 else : #上記の否定(読み取った値がXより小さい場合) P = 0 #4桁目の正負の判断 X += P #XとPを足す、二進数3桁目は4のため utime.sleep(1) #1秒の遅延を発生させる reading = sensor_temp.read_u16() * conversion_factor #センサーの値を読み取る。(3回目) if N < reading: #読み取った値に平均がNより大きい場合 Nに実数を入力 X += Q #4桁目の正負の判断 else : #上記の否定(読み取った値がXより小さい場合) Q = 0 #4桁目の正負の判断 X += Q #XとQを足す、二進数2桁目は2のため utime.sleep(1) #1秒の遅延を発生させる utime.sleep(1) #一秒の遅延を挟む reading = sensor_temp.read_u16() * conversion_factor if N < reading: #読み取った値に平均がNより大きい場合 Nに実数を入力 X += R #4桁目の正負の判断 else : #上記の否定(読み取った値がXより小さい場合) R = 0 #4桁目の正負の判断 X += R #XとRを足す二進数1桁目は1のため utime.sleep(1) #1秒の遅延を発生させる #ここまでで読み取った数値が分かるようになっている if X == 9: print = seg_9 elif X == 8: print = seg_8 elif X == 7: print = seg_7 elif X == 6: print = seg_6 elif X == 5: print = seg_5 elif X == 4: print = seg_4 elif X == 3: print = seg_3 elif X == 2: print = seg_2 elif X == 1: print = seg_1 elif X == 0: print = seg_0 else : print = seg_10 #ここまででXに対応する7seg引数の呼び出し #GPIOの電圧を制御 GPIO.output(print, GPIO.HIGH) #GPIOの出力をHigh(3.3V)にする、seg_nを点灯 time.sleep(5) #5秒間待つ GPIO.output(print, GPIO.LOW) #GPIOの出力をLow(0V)にする、seg_nを消灯 #GPIOをクリーンアップ GPIO.cleanup()
@Shartick
@Shartick 2 года назад
ありがとうございます。コード拝見しました。 おそらく何か既存のコードを参考に作成されたのではないかと思いますが、参考にした元のコードがラズパイPicoのものではなく普通のラズパイ(Linuxベース)用のようです。 このRPi.GPIOはPythonのモジュールですが、ラズパイPico上で動くMicroPythonにはこのモジュールがないためimportできずエラーになります。 (ラズパイPicoでは通常"machine"というモジュールをimportしてGPIOにアクセスします。過去動画の説明欄を見ていただくとサンプルコードがあります) なお、MicroPython用のRPi.GPIOに相当するコードを探してみたところ、以下のフォーラムに情報が見つかりました。 forums.raspberrypi.com/viewtopic.php?t=309263 下記のコードをThonnyに貼り付けて保存する際、保存先"Raspberry Pi Pico"を選択し、右クリックして"New Directory..."を選び"RPi"というフォルダを作成します。 その中に"GPIO.py"という名前で保存すれば、メインのコード内で"import RPi.GPIO as GPIO"と書くことで、完全ではないですがRPi.GPIOっぽい動きをしてくれそうです。 ただ、下のコードを見た感じsetupとoutputとinputしか実装されていないので、GPIO.setmode()やGPIO.cleanup()に相当する部分は自分で実装する必要がありますね…。 ========以下フォーラムより転載======== from machine import Pin BCM = 0 OUT, IN = 0, 1 LOW, HIGH = 0, 1 PUD_DOWN, PUD_UP, PUD_NONE = 0, 1, -1 gpio = [ None ] * 32 def setwarnings(giveWarnings) : pass def cleanup() : pass def setmode(mode) : pass def setup(pin, mode, pull_up_down=PUD_NONE): if mode == OUT : gpio[pin] = Pin(pin, Pin.OUT) elif pull_up_down == PUD_DOWN : gpio[pin] = Pin(pin, Pin.IN, Pin.PULL_DOWN) elif pull_up_down == PUD_UP : gpio[pin] = Pin(pin, Pin.IN, Pin.PULL_UP) else : gpio[pin] = Pin(pin, Pin.IN) def output(pin, level): if level : gpio[pin].high() else : gpio[pin].low() def input(pin): return gpio[pin].value()
@Tもちぐち
@Tもちぐち 2 года назад
@@Shartick今まで疑問に思っていた部分がスッキリしました。ここまで詳しく説明してくださり本当にありがとうございます!
@Shartick
@Shartick 2 года назад
とんでもないです。わずかながらでもお役に立てたのであれば幸いです。
Далее
WHO IS MORE GREEDY?!
00:18
Просмотров 1,1 млн
Hacking my garage door with the Raspberry Pi Pico W
11:50
DIY Raspberry Pi + e-paper weather station
9:28
Просмотров 59 тыс.