【Raspberry Pi Pico】SDカードにファイルを書き込む方法

【Raspberry Pi Pico】SDカードにファイルを書き込む方法

こんにちは! けい(Twitter)です。

今回は、Raspberry Pi Pico(ラズピコ)でSDカードにファイルを書き込む方法を紹介していきたいと思います。

必要な物

Raspberry Pi Pico

SDカードリーダーモジュール

SPI通信を介してマイコンとSDカードを接続することができます。

SDカード

SDカードに相性問題があるようです。
自分が持っている中で動作したものがこちらのKingstonのSDカードです。

created by Rinker
キングストンテクノロジー
¥1,900 (2024/04/18 05:41:39時点 Amazon調べ-詳細)

MicroPythonのファームウェアのアップデート

MicroPythonでのSDカード対応が最近行われたので、古いファームウェアを使っている方はファームウェアの再度書き込みを行ってください。

こちらのページからダウンロードして、ファームウェアの書き込みを行ってください。

ファームウェアの書き込み方法については以前の記事を参考にしてください。(勿論Win/Macからでも書き込めます。)

ライブラリのダウンロード

githubからダウンロード

MicroPythonでのSDカードを簡単に取り扱えるライブラリが公開されているので、そちらをダウンロードします。

こちらのリンクにアクセスして、zipファイルをダウンロードします。

「Code」→「Download ZIP」でダウンロードできます。

ラズピコに保存

ダウンロードが完了したら、解凍を行ってください。

ラズパイをPCと接続し、Thonnyを開きます。

「ファイル」→「Open…」をクリックします。

「This Computer」を選択し、先ほど解凍したフォルダから
「micropython-master/drivers/sdcard/sdcard.py」をOpenします。

それではこのファイルをラズピコに保存していきます。
「ファイル」→「Save as…」をクリックします。

「Raspberry Pi Pico」を選択し、「sdcard.py」という名前で保存してください。

これでライブラリの準備は完了です。

回路図

Raspberry Pi PicoSDカードモジュール
GP28CS
GP6SCK
GP7MOSI
GP4MISO
VSYSVCC
GNDGND

サンプルプログラム

それでは、MicroPythonでSDカードにファイルを書き込んでみましょう。

このプログラムは、「テストテストテスト」という内容のテキストファイル「test.txt」を作成しています。

import machine
import os
import sdcard

sd = sdcard.SDCard(machine.SPI(0), machine.Pin(28))  
os.mount(sd, '/sd')

# ファイル書き込み
file = open('/sd/test.txt', 'w')
file.write('テストテストテスト')
file.close()

実行後に、「/sd/test.txt」というファイルが保存されているはずです。

温度センサーで読み取った値をファイルに保存する

それでは、ラズピコの温度センサーから温度を取得し、ファイルに保存してみましょう。

import machine
import os
import sdcard
import utime

sd = sdcard.SDCard(machine.SPI(0), machine.Pin(28))  
os.mount(sd, '/sd')

sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

# 温度を10回分記録
file = open('/sd/test.csv', 'w')
for i in range(10):
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = 27 - (reading - 0.706)/0.001721   
    file.write('temperature,' + str(temperature) + '\n')
    utime.sleep(1)
file.close()

これは、10個の温度のデータを10行のcsvファイルに保存するプログラムです。

温度センサーの使い方については以前の記事を参考にしてみて下さい。

エクセルで問題なく見ることができました。