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()
picoをもらったので検索な海をさまよい、ここにたどり着きました。ネットワークにつなげるなんて一気に夢が広がってワクワクしてきました。DNS通信してみたいです。
コメントありがとうございます。
Picoがネットワークに繋がるようになれば可能性がかなり広がりますね!
WiFi接続できれば最高なのですが、こちらはまだ研究中なのでやり方が分かり次第動画にしたいと思います。
すばらしい!これで、PICO が使えるものになりました。
さっそく HTTP で親サーバーと通信するソフトが出来ますね。
僕は火災警報器を Raspberry PI Zero + ADコンバーター+煙センサーで作って
いたんですが、PICO でも火災警報器が出来ますね。
おお、火災報知器ですか。素晴らしいですね。
汎用性や使いやすさはZeroに軍配が上がるのですが、アナログ変換が必要なので一長一短なんですよね。
Picoがようやく安定してネットワーク接続ができるようになったので、使い道がかなり広がりそうです!
めちゃくちゃ勉強になります!pico関連の動画で一番分かりやすいです!
もし機会があれば自作タッチセンサーの動画も載せてください!日本語の動画がないです>_<
次回も楽しみにしてます!
コメントありがとうございます!!とても嬉しいです。
今後も仕事が落ち着いたらバンバンPico関連の動画を投稿していきますのでよろしくお願いします!🙇
とてもためになりました、面白かったです!ありがとうございました。
これでセンサーデータをトリガーにした送信、が出来ることが分かりました。
この逆、親となるマシンがあったとして、そこから指示を受けてpicoのプログラム(関数)を発動させたい場合は、どんな通信が良いのでしょうか。
つまり受信です。
これもLANでいけるのでしょうか。
picoじゃないのかもしれませんが。。
そしてデスマ、お身体に気をつけてがんばってください
こちらこそご視聴、コメントありがとうございます!何とかデスマを生き延びて頑張って次の動画を作ります。
ご質問いただいた件ですが、
①マシン同士で通信する場合、今回取り上げた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で完結するのである意味シンプルに作れそうです。
実際に試せていないので上手くいくかは分からないのが申し訳ないのですが…時間が取れたら試してみます!(時間が取れたら…!)
こんにちはいつも楽しく拝見させていただいております。
お手すきになったら、ESP32とPicoを組み合わせてPicoの無線LAN化をお試しいただけないでしょうか?
いつもご視聴本当にありがとうございます。
Picoで無線LANはいつか実現したいと思っていますので、うまく行った暁には必ず動画で紹介します!
(ちょっと調べてみた所、実現できそうな情報が見つかったので近いうちに頑張ってみます)
ウェアラブル点字デバイスできますか?指点字マシーンですチャットとか通知メッセージを指点字で読み取りたいですeps32を使って指先のモーターを動かして目と耳に障害がある人のために作っていたらけないでしょうか
最近ピコも供給が増えてきたみたいですね。
御一人様200枚までOKになってました。
買ったのはゼロWですが カリを入れたけどちょっともっさり
もう200枚までOKになりましたか!供給安定していつでも手に入りそうですね。よかったです。
ゼロWもなかなか遊べるのですがデスクトップ的な使い方をするにはちょっと厳しいですよね。工夫のし甲斐があって面白いです。
MISOはMaster In Slave Out だと思います。
MOSIも
一般的にはMaster/Slaveを使いますよね。
この動画ではCircuitPython内での呼称に準拠してMicrocontroller/Sensorを使用しています(昨今の人権問題への取り組みでしょうね)。
蛇足になると思い動画内では言及しなかったのですが、紛らわしいので概要欄に追記しておきます。ご指摘ありがとうございます。
@@Shartick
そうなんですね。
蛇足でしたねすみません、、
いえいえとんでもないです!コメントありがとうございます〜😆
ラズパイでVGA出力やって欲しい
リクエストありがとうございます。いいですね〜VGA出力!
確か以前Twitterで試していた人がいたはずなので探してみます!
ラズパイpicoのみを購入したのですがmoduleをインストールすることができません。
ラズパイpicoにrpi.gpioのmoduleを導入することはできますか?
プログラミングしてみたところno named module error rpi となるので…
公式のMicroPythonを使っていますか?
もしよろしければ、動かそうとしているコードを貼っていただければこちらでも動かしてみます!
@@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()
ありがとうございます。コード拝見しました。
おそらく何か既存のコードを参考に作成されたのではないかと思いますが、参考にした元のコードがラズパイ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()
@@Shartick今まで疑問に思っていた部分がスッキリしました。ここまで詳しく説明してくださり本当にありがとうございます!
とんでもないです。わずかながらでもお役に立てたのであれば幸いです。