JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Raspberry Pi Pico CircuitPython PWMテスト

2022-04-22 11:58:12 | Raspberry Pi Pico
 Raspberry Pi Pico + CircuitPython + MuIDE環境で、PWMのテストをします。
 回路図です。
 PWM出力は、GP14に出力し、ADC0の電圧でDuty cycleを調整します。つまり、10KΩのボリュームを回すとLEDの明るさが変わります。


 スクリプトです。
 PWMの周波数は、1000Hzにしました。
 duty_cycleの値には、アナログ入力の値(0~65535)が与えられます。
----------------------------------------------------------------------------
"""
CircuitPython PWM test
2022.4.22
JH7UBC Keiji Hata
"""

from board import *
import analogio
import pwmio
import time

VR = analogio.AnalogIn(A0)
LED = pwmio.PWMOut(GP14,frequency = 1000)

while True:
     LED.duty_cycle = VR.value
     time.sleep(0.1)
----------------------------------------------------------------------------
 ブレッドボードです。右上のボリュームを回すとLEDの明るさが変わります。


 PWM出力をPicoScopeで見てみました。
 約1000HzのPWM信号が出力されています。
 ボリュームを回すと、duty cycleが変化する様子が確認できました。



Raspberry Pi Pico CircuitPython アナログ入力テスト

2022-04-21 18:58:34 | Raspberry Pi Pico
 Raspberry Pi Pico + CircuitPython + MuIDE環境でアナログ入力のテストをします。

 回路図です。
 Raspberry Pi Pico は、ユーザーが使えるアナログ入力(ADコンバータ入力)は
 ADC0  GP26(31番ピン)
 ADC1  GP27(32番ピン)
 ADC2  GP28(34番ピン)
 です。今回は、ADC0を使って、電圧計を作ってみます。
 3.3VOUTの電圧をボリュームで調整して、ADC0入力に加え、その電圧をshellに表示します。



ブレッドボードです。



 スクリプトです。
 Raspberry Pi PicoのADCは、12bit(0~4095)ですが、16bit(0~65535)に左詰めで格納されます。
 1秒ごとに電圧を表示します。
 coeffは、ADCの値を電圧に変換する係数です。
 電圧は、formatメソッドで小数点以下2桁で表示しています。
------------------------------------------------------------------------------
"""
CircuitPython ADC test
2022.4.21
JH7UBC Keiji Hata
"""

from board import *
import analogio
import time

pin = analogio.AnalogIn(A0)
coeff = 3.3/65535

while True:
    v = pin.value * coeff
     print("電圧 {:.2f} V".format(v))
     time.sleep(1)
------------------------------------------------------------------------------

 ボリュームを少しずつ回して、電圧を上げていった時のshell(REPL)の表示です。




Raspberry Pi Pico CircuitPython デジタルIOテスト

2022-04-20 16:54:56 | Raspberry Pi Pico
 Raspberry Pi Pico CircuitPython + Mu IDEで、デジタルIOのテストをします。
 回路図です。
 GP15は、デジタル入力に設定し、プルアップし、push スイッチを接続します。
 GP16は、デジタル出力に設定し、LEDを接続します。



 まず、SWを押すとLEDが点灯するスクリプトです。
----------------------------------------------------------------------
import digitalio
from board import *
import time

LED = digitalio.DigitalInOut(GP16)
LED.direction = digitalio.Direction.OUTPUT
SW = digitalio.DigitalInOut(GP15)
SW.direction = digitalio.Direction.INPUT
SW.pull = digitalio.Pull.UP

while True:
     if SW.value == False:
         LED.value = True
     else:
         LED.value = False
     time.sleep(0.01)
--------------------------------------------------------------------

 次に、SWを押すたびにLEDが点灯、消灯が切り替わるスクリプトです。
--------------------------------------------------------------------
import digitalio
from board import *
import time

LED = digitalio.DigitalInOut(GP16)
LED.direction = digitalio.Direction.OUTPUT
SW = digitalio.DigitalInOut(GP15)
SW.direction = digitalio.Direction.INPUT
SW.pull = digitalio.Pull.UP

LED.value = False

def LED_toggle():
     if LED.value == False:
         LED.value = True
     else:
         LED.value = False

while True:
     if SW.value == False:
         LED_toggle()
         while SW.value == False:
             time.sleep(0.01)
     time.sleep(0.01)

--------------------------------------------------------------------
 ブレッドボードです。



Raspberry Pi Pico CircuitPython 導入からLチカまで

2022-04-19 07:53:02 | Raspberry Pi Pico
 先日、ほんとうに久しぶりに購入した「トランジスタ技術」5月号は、ラズパイPico特集でした。記事にCircuitPythonを使ったものがありました。CircuitPythonはライブラアリが充実しているという内容がありましたので、今回CircuitPythonに挑戦してみることにしました。

 しかし、Raspberry Pi Pico + CircuitPythonでのプログラミングの例はWeb上には意外に少なく、Lチカ(LED点滅)ができるまでちょっと手こずりました。

 そこで、Raspberry Pi PicoへのCircuitPython導入からMuエディタを使ったプログラミングまで、少し丁寧に書いておきたいと思います。これからCircuitPythonを使ってみようという方の参考になれば、幸いです。

 まず、ファームウェアCircuitPythonをCircuitPythonのサイトからダウンロードします。

 画面左上の「Downloads」をクリックして、ダウンロード画面に進みます。
 一番左端の「Pico」をクリック。

 CircuitPythonは、4月18日現在でVer 7.2.5です。言語は、日本語を選んでダウンロードします。

 ダウンロードされたファイルは、
adafruit-circuitpython-raspberry_pi_pico_ja-7.2.5.uf2でした。

 これをPicoに書き込むわけですが、無用なトラブルを避けるために、Picoを初期化(クリア)しました。方法は、BOOTSELボタンんを押しながら、PicoをUSBに接続し、メモリデバイス(RPI-RP2)として認識されたダイアログに、flash_nuke.uf2をドラッグアンドドロップします。
 クリアしたPico(RPI-RP2)に先ほどダウンロードしたcircuitpythonのuf2ファイルをドラッグアンドドロップします。これでファームウェアが書き込まれて、CircuitPythonが使える状態になりました。

 ここで、CircuitPythonとMicroPythonの違いに気が付きます。CircuitPythonでは、下の図のようにPico本体が単なるUSBメモリとして扱えるのです。


 さて、プログラムを編集するエディタですが、Muエディタを使います。
 Code with Muのサイトから「Download」をクリックしてダウンロード画面に進みます。


 私のPCのOSは、Windows10なので、「Windows Installer」64bit版をダウンロードしました。


 ダウンロードしたMuエディアファイルをPCにインストールして、立ち上げます。最初立ち上がるまで若干時間がかかります。
 立ち上がったら、「モード」をクリックして、モードを「CircuiPython」に設定します。



 エディタの画面です。
 まず第一歩は、Lチカ(LED点滅)のサンプルプログラム(スクリプト)をmain.pyという名前でPicoに書き込みました。Pico内蔵のLED(GP25に接続されています)が点滅しました。成功です。


 はて、プログラムはどうして止めるの?この辺からMUエディタの使い方が分からないことばかりになり、一応細かいところまでわかるまで、あちこち調べて2日ほどかかりました。次に結論を書いていきます。

 まず、MUエディタとPicoとの間で通信を行うために、「シリアル」をクリックして、シリアル通信を開きます。これで、Picoとの通信ができるようになります。
 そこで、キーボードからCTRL+Cを押すとKeyboardInterruptがかかり、プログラムがストップします。
 プログラムを再開するには、CTRL+Dをを押します。プログラムが再び動き出します。
 プログラムが停止した状態になると開いているREPL(Read Evaluate Print Loop)ウインドウに
「Press any key to enter the REPL. Use CTRL-D to reload.」と表示されます。何かキーを押すと、RPELモードになり、プロンプト>>>が表示され、コマンド待ちになります。
REPLモードで、CTRL+Dを押すとプログラムが再開します。

 それから、MicroPythonのつもりで、スタンドアローンで動かすためのファイル名は、main.pyだと思い込んでいたのですが、CircuitPythonでは、code.pyとしなけれいけないことが分かりました。
 Lチカのプログラム名を「code.py」として保存して、一旦USBケーブルを抜き、次にUSBケーブルを接続すると何もしないでLチカが始まりました。


 
 MicroPython+ThonnyエディタとCircuitPython+Muエディタは、けっこう違うところが多いことが分かりました。

 一応動かせるようになりましたので、これから少しずつ勉強して、記録を記事にしていきたいと思います。
 

コブシとフクジュソウ

2022-04-18 09:26:57 | 夢の森から
 昨日は、久しぶりの快晴。
 こちら喜多方市熱塩加納町は、桜が満開になりました。
 しかし、今日のテーマは桜ではなく、コブシです。
 ここ数年コブシの花の写真を撮り続けています。
 コブシの花は、桜より少し早く咲きます。
 今年は、撮影の時期を逃してしまったかとも思ったのですが、近所のコブシを撮影しに出ました。

 加納小学校の校庭のコブシがまだ咲いていたので、パチリ。


 青空をバックに清々しく咲くコブシ。きれいですね。

 また、近くの集落に大きなコブシを発見して、その姿もカメラに収めました。

 あまりにも天気が良いので、国道121号線、大峠道路を米沢方面にドライブしました。峠を越えて田沢という集落から、小野川温泉方面に曲がってすぐのところにフクジュソウの群生を見つけました。

 以前から福寿草が咲いていた場所ですが、すごく増えて見事な福寿草の群生です。

 春を楽しんだ一日でした。