目次
- はじめに
- この記事の対象者
- 動作環境
- 事前準備
- PicoとSDカードスロットの配線
- SDカードのフォーマット
- ラズパイPicoへライブラリを追加
- プログラム制御
- テキストファイルの出力
- csvファイルの出力
- 別キットで動かす:レベルシフタ付きブレークアウト基板キット
- 参考リンク
はじめに
初投稿なので過不足等あればご指摘いただけると幸いです。
※当記事では以降「ラズパイPico」表記といたします。
この記事の対象者
・ラズパイPicoでmicroSDカードへの書き込みをしたい方
※とりあえず動けばいい人向けの内容となります。
動作環境
・MicroPython:v1.20.0
・micropython-lib/micropython/drivers/storage/sdcard/sdcard.py:2023/02/03版
→https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/storage/sdcard
・マイクロSDカードスロットDIP化キット
→秋月電子リンク:https://akizukidenshi.com/catalog/g/gK-05488/
事前準備
PicoとSDカードスロットの配線
当SDカードスロットではSPI通信でのデジタル通信が行われます。
ラズパイPicoのピン配置を参考に、以下表に従って接続します。
※空白は接続なし
※SPIはどこでもいいですが、バスは同一のものを使用(0 or 1)
SDカードスロット | ラズパイPico(GPIO) |
---|---|
DAT2 ① | |
CD/DAT3 ② | SPIx CSn |
CMD ③ | SPIx TX |
VDD ④ | 3V3(OUT) |
CLK ⑤ | SPIx SCK |
VSS ⑥ | GND |
DAT0 ⑦ | SPIx RX |
DAT1 ⑧ | |
カード検出スイッチB ⑨ | |
カード検出スイッチA ⑩ |
SDカードのフォーマット
・[FAT32]形式でフォーマットをしておく([exFAT]形式だと読み込めなかった)
・windowsの場合は以下操作でフォーマット可能
SDカードをPCに接続→[SDカードのドライブ]を右クリック
→[フォーマット(A)]を選択→項目[ファイルシステム]を[FAT32]に設定して[開始]を押下
ラズパイPicoへライブラリを追加
・動作環境部分に記載した[sdcard.py]をラズパイPicoへ導入
(筆者はThonnyでライブラリを開き、保存(Ctrl+s)した際に出てくる[Where to save to?]にて[Raspberry Pi Pico]を選択して導入しています)
プログラム側での制御
・サンプルとして以下接続をした場合のソースを記載いたします。
・サンプルの保存先はSDカードのルートとなります。
SDカードスロット | ラズパイPico(GPIO) |
---|---|
CD/DAT3 ② | GP5 |
CMD ③ | GP3 |
VDD ④ | 3V3(OUT) |
CLK ⑤ | GP2 |
VSS ⑥ | GND |
DAT0 ⑦ | GP4 |
①テキストファイルとして出力する際のサンプル
from machine import Pin, SPI
import os, sdcard
spi = SPI(0,sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(5))
os.mount(sd, '/sd')
fp = open('/sd/test.txt', 'w')#ファイルが存在しない場合は新規作成
fp.write('test')#ファイルに書き込み
fp.close()#ファイルを閉じる
②csvファイルとして出力する際のサンプル
from machine import Pin, SPI
import os, sdcard
spi = SPI(0,sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(5))
os.mount(sd, '/sd')
fp = open('/sd/test.csv', 'w')#ファイルが存在しない場合は新規作成
fp.write("{},{}\r\n".format("ヘッダA","ヘッダB")) #ヘッダ書き込み
fp.write("{},{}\r\n".format("A", "B")) #データ部分書き込み
fp.close()#ファイルを閉じる
別キットで動かす:レベルシフタ付きブレークアウト基板キット
こちらの電子部品も同様に動作を確認しているので、ついでに記載いたします。
ラズパイPicoは3.3vの出力が利用できるので、[1]ピンは使用せず、[3]ピンに電源入力をしています。
(Arduino等の5v出力するものは[1]に電源入力するもの。と解釈しています。)
電子部品
・microSDカードスロット レベルシフタ付きブレークアウト基板キット
→秋月電子リンク:https://akizukidenshi.com/catalog/g/gK-14015/
PicoとSDカードスロットの配線
SDカードスロット | ラズパイPico(GPIO) |
---|---|
[1]+5V電源入力(+4.0V~+6.5V) | |
[2]内部3.3Vレギュレータ ON/OFF | |
[3]内部3.3Vレギュレータ出力 | 3V3(OUT) |
[4]GND | GND |
[5]SDカード クロック(CLK) | SPIx SCK |
[6]SDカード データ(DAT) | SPIx RX |
[7]SDカード コマンド(CMD) | SPIx TX |
[8]SDカード チップセレクト(CS) | SPIx CSn |
[9]SDカード カード検出スイッチ(SW 検出時GND) |
参考リンク
・ラズパイPicoデータシート
https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf
・micropython-lib
https://github.com/micropython/micropython-lib
・クラス[SDCard]のドキュメント
https://micropython-docs-ja.readthedocs.io/ja/latest/library/machine.SDCard.html?highlight=sdcard