JH7UBCブログ

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

Raspberry Pi Pico MicroPython シリアル通信(UART) テスト

2021-11-12 07:46:04 | Raspberry Pi Pico
 Raspberry Pi Picoのシリアル通信のテストをします。
 Picoは、UART0とUART1の2つのUARTコントローラを持っています。

 UART(id)  id=0 or 1 だけ指定した時のデフォルトは、次のとおりです。
 id      TX       RX      baudrate     parity    stopbit
 0 GPIO0 GPIO1   115200  なし  1
 1    GPIO4 GPIO5   115200  なし  1

 UART(1)だけを指定した時のUARTテスト用のスクリプトです。送受信は定番の通信ソフトTeraTermを使います。
 5行目 Picoからパソコン(TeraTerm)に「UART test」を送信します。
 8行目 any()は、読み込めるバイト数を返します。
 9行目 read(1)は、1文字読み込みです。このスクリプトは1文字入力されれば、その文字を送信します。



 USBシリアル変換は、FT234を使い、USBに接続しました。接続回路図です。


ブレッドボードです。FT234のRX,TXはPicoの6番ピンGP4(TX),7番ピンGP5(RX)に接続します。FT234の電源は5V(VBUS)に接続します。

 TeraTermは、下のように設定します。ポート番号は接続したパソコンに合わせます。

 TeraTermの画面です。Picoから「UART test」を受信して表示し、パソコンのキーボードから送られた文字をそのまま送り返します。

 UART(0)とUART(1)では、次のGPIOの組を使用することができます。
  UART(0)     UART(1)
  TX  RX     TX  RX
 GPIO0 GPIO1  GPIO4 GPIO5
 GPIO12 GPIO13 GPIO8 GPIO9
 GPIO16 GPIO17

 UART(1)でbaudrate, 9600bps  ,TX GPIO8 ,RX GPIO9を使う場合は
 UART(1,baudrate=9600,tx=Pin(8),rx=Pin(9))とします。
 この場合、スクリプトの1行目にimport UART,Pin として、Pinをimportしておきます。

Raspberry Pi Pico MicroPython PWM テスト

2021-11-11 08:22:21 | Raspberry Pi Pico
 Raspberry Pi PicoのPWM(Pulse Width Modulation)のテストをします。
 Picoは、DAC(デジタルアナログコンバータ)を持っていませんので、Arduinoと同じように疑似アナログ出力としてPWMを使うことになります。

 PWM信号は、全てのGPIOに出力可能です。
 例として、GP15に1000Hz、デューティ比50%の信号を出力するスクリプトです。
 4行目 GP15にPWM信号を出力します。
 5行目 周波数を1000Hzに指定します。
 6行目 デューティ比を設定します。16ビット(0~65535)で指定します。この例では、32768ですから、50%になります。


 出力された波形です。設定した通りの波形です。


 実際の周波数を測定してみました。

 確かに1000Hzです。けっこう正確です。周波数は100Hzから60kHzまで設定できます。

 dutyを設定する方法は、duty_u16( ) の他に、dutyの幅をns単位で設定できる duty_ns( ) があります。

 deinit() でPWMを無効化できます。

 PicoのGPIOは、30個ありますが、下の表のようなグループに分けられ、周波数は、スライス単位で、デューティは、チャンネル単位で設定します。

 スライス  チャンネルA    チャンネルB
  0   GPIO0 GPIO16  GPIO1 GPIO17
  1   GPIO2 GPIO18  GPIO3 GPIO19
  2   GPIO4 GPIO20  GPIO5 GPIO21
  3   GPIO6 GPIO22  GPIO7 GPIO23
  4   GPIO8 GPIO24  GPIO9 GPIO25
  5   GPIO10 GPIO26   GPIO11 GPIO27
  6   GPIO12 GPIO28   GPIO13 GPIO29
  7     GPIO14      GPIO15

Raspberry Pi Pico MicroPython アナログ入力(ADC)テスト

2021-11-10 08:01:54 | Raspberry Pi Pico
 Raspberry Pi Picoのアナログ入力(ADC)のテストをします。
 Picoは、ADC(アナログデジタルコンバータ)を5個持っています。
 ただし、ユーザーが使えるのは、3個です。
 各チャンネルの使用目的とピン割り当ては、以下のとおりです。

 ADC(0) ユーザー GP26 31番ピン
 ADC(1) ユーザー GP27 32番ピン
 ADC(2) ユーザー GP28 34番ピン
 ADC(3) Vsys電源電圧
 ADC(4) 内蔵温度計

 PicoのADCの解像度は12ビットで0~3.3Vを0~4095に変換します。データは、16ビット(0~65535)で格納されます。

 まず、ADC(0)を使って、読み込んだ電圧を測定してみましょう。
 回路図です。10kΩのボリュームに3.3Vを加え、電圧を変化させて、ADC(0) GP26(31番ピン)に入力します。


 MicroPythonのスクリプトです。
 4行目 GP26を入力に設定します。(この行を記入しなくても動作しました。)
 5行目 使うADCを指定します。
 6行目 AD変換された値をVに変換する係数です。
 9行目 ADC(0)の値を読み込み、V(ボルト)に変換します。
 10行目 Shellにその値を表示します。{:.2f}で、小数点以下2桁まで表示します。

 1.74~1.76Vが測定されました。最終桁は少し動きます。
 実際の電圧をデジタル電圧計で測定してみました。


 0.1V以内の誤差で測定できるようです。

 次に、CPU(コア)の温度を内蔵のセンサーで測定してみます。
 スクリプトです。
 5行目 センサーが接続されているADC(4)を指定します。
 9行目 温度に変換する式です。
 10行目 小数点以下1桁まで表示します。


 室温は、20℃程度でしたので、やや低めに測定されました。
 Shellには、漢字も表示できるんですね。

 Web上にRaspberry Pi Picoの情報はまだ多くはありません。そこで、Interface 8月号を購入しました。「ラズパイのマイコン Pico 攻略本」です。

 さすがに、詳しく書いてあり、参考になります。MIcroPythonについては、巻末の方に特集が掲載されています。

Raspberry Pi Pico MicroPython Digital I/O テスト

2021-11-09 12:46:39 | Raspberry Pi Pico
 Paspberry Pi Picoに関する情報はWeb上にはまだ多くはありません。そこで、基本的なことから、一つずつ勉強していくことにします。

 まず、スペックやピン配列については、本家Raspberry Pi のサイトから情報を得ます。そこからRasoberry Pi Picoのページを開きます。

 スペックとピン配列が掲載されています。ピン配列です。

 GP0~GP22,GP26~28が各ピンに配置されています。
 GP23~GP25とGP29はボード回路の制御に使われており、利用できるGPは26本です。なお、GP25は、オンボードLEDに接続されています。
 また、電源とGND,UART,ADC,SPI,I2C,などの配置が記載されています。

 まず、基本としてデジタル入力、出力のテストをします。
 この機能は、全てのGP(GPIO)で利用でき、入力は内部でプルアップすることができます。

 テスト回路です。GP15のスイッチを押すとGP16のLEDが点灯します。

 GP15はデジタル入力としプルアップします。GP16は出力に設定します。スクリプトです。


 ブレッドボードです。

 同じ回路です、スイッチを押すたびに点灯、消灯を繰り返すスクリプトです。

 入力ピンをプルダウンする場合は、Pin.PULL_DOWNと記載します。

 最初、プルアップ、プルダウンをどのように記載するか分からなかったのですが、こちらのYouTube動画が参考になりました。Pico購入時からThonnyのセットアップ、MIcroPythonのスクリプトの作り方まで丁寧に説明しています。ただし、英語です。でも画像を見れば分かりますよ。

 各GPIOに流すことができる電流は、GPIO制御レジスタで設定できるようです。デフォルトで4mA、GPIO全体で50mAです。

Raspberry Pi PicoをArduino IDEで使う

2021-11-05 21:45:19 | Raspberry Pi Pico
 Raspberry Pi PicoをThonny IDEを利用して、Micropythonでプログラミングする勉強をしています。

 I2C LCD AQM0802Aの表示はネット上のサンプルスクリプトで動作を確認しました。しかし、PWMやUARTなどどうも思うように動かせません。私のMicropythonの知識が浅いせいですが、進まなくなってきました。

 そこで、ちょっと浮気して、Arduino IDEでのプログラミングを試してみます。使い慣れたArduino IDEですから、うまく動かせるかもしれません。

 Arduino IDEでRaspberry Pi Picoを使う手順です。こちらのサイトを参考にしました。

 Arduino IDEをインストールします。(私は、最新版の1.8.16をインストールしました。)

 Arduino IDEを立ち上げ、ツール→ボード→ボードマネージャと進み、ボードマネージャを開き、検索欄に「pico」と入力し、検索された中から「Arduino Mbed OS RP2040 Boards」をインストールします。

 Raspberry Pi PicoのBOOTSELボタンを押しながらパソコンのUSBに接続します。

 この時点では、Raspberry Pi Picoが接続されているCOMポートは認識されていませんでした。
 しかし、スケッチ例の中から01.BasicsのBlink(LED点滅)のスケッチを書き込むと、自動的にCOMポートが認識され、コンパイルされたプログラムがRaspberry Pi Picoに書き込まマれ、ボード内蔵のLED(Pin25に接続されている)が点滅しました。

 この後、確認するとCOM9(Raspberry Pi Pico)として認識されていました。そこで、ツールシリアルポートをこのポートに設定します。

 これで、Arduino IDEでRaspberry Pi Picoが使えるようになりました。気づいたことは、コンパイルに非常に時間がかかることです。これは私のパソコンが非力なのが一つの原因だと思います。

 なお、スケッチを書き込んだ後は、Raspberry Pi Picoを電源に接続するだけでプログラムが動作します。

 また、Raspberry Pi PicoのBOOTSELスイッチを押さないで、USBに接続して、パソコンからスケッチを書き込むと、RPI-RP2が表示され、すぎに消えて、書き込まれたスケッチが動作します。

 この後、Arduino IDEを使ってRaspberry Pi Picoの機能を確認していきたいと思います。

 スケッチは、Arduinoとまったく同じです。