2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

milk-V DuoAdvent Calendar 2023

Day 11

Milk-v DuoのLinux sysfs gpio accessを使ってLチカする

Last updated at Posted at 2023-12-10

はじめに

秋葉原ロボット部の有志で、Milk-v Duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v Duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。

  1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
  2. 最高1 GHzで動作するデュアルRV64コア
  3. 64 MBのラム
  4. オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能

GPIO経由で様々な機器を操作する方法には複数ありますが、今回は、Linux sysfs gpio accessを使って、Lチカを行います。
Swap領域が利用可能なMilk-v DuoをUSBケーブルでWindowsマシンに接続した環境で、実験を行っています。

sysfsを使うGPIO操作

sysfsを使うとGPIOの操作が簡単らしいという情報が
https://www.nds-osk.co.jp/atc/wp-content/uploads/UserlandIO.pdf
に、掲載されています。
デバイスドライバを用意しなくても、ファイルアクセスとしてGPIOを操作可能になるライブラリのようです。

Linux sysfs gpio accessのインストール

Raspberry pi用のライブラリが利用可能ですので、こちらをインストールします。
https://github.com/vitiral/gpio 」の「Releases」に「Version 1.0.0」のソースコードが公開されているので、「gpio-1.0.0.zip」をWindowsマシンでダウンロードして、Milk-v Duoにファイルを転送します。
Milk-v Duo上で作業を行います。

[root@milkv-duo]~# unzip gpio-1.0.0.zip
[root@milkv-duo]~# cd gpio-1.0.0
[root@milkv-duo]~# pip install .

SDカード上のSWAPを使うので、不安になるぐらい進捗が遅くなります。
プロンプトが表示されるまで我慢します。

WARNING: The directory '/root/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Processing /root/gpio-1.0.0
Installing collected packages: gpio
    Running setup.py install for gpio ... done
Successfully installed gpio-1.0.0

[root@milkv-duo]~/gpio-1.0.0#

「/sys/class/gpio/export」の権限を修正します。

[root@milkv-duo]~# chmod +r /sys/class/gpio/export

Lチカプログラム作成

githubのページに掲載されている「RPi.GPIO Drop-in」の例を参考にpythonスクリプトを作成します。
LチカするLEDは、本体上の青色LEDを使います。
このLEDの番号は「440」です。

blinktest1.py
import time
import gpio as GPIO

GPIO.setup(440, GPIO.OUT)

while True:
    GPIO.output(440, GPIO.HIGH)
    time.sleep(1.0)
    GPIO.output(440, GPIO.LOW)
    time.sleep(1.0)

「blinktest1.py」を動作させる前に、起動時に自動点滅する設定を停止して、再起動しておきます。

mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync

上記を実行したのち、再起動します。
青色LEDが消灯していることを確認して、スクリプトを実行します。

[root@milkv-duo]~# python blinktest1.py

青色LEDの点滅が始まります。

もう一つの例、「Use GPIOPin directly」の例を参考に、以下のスクリプトを作成しました。

blinktest2.py
import gpio

pin = gpio.GPIOPin(440, gpio.OUT)

while True:
    pin.write(440, GPIO.HIGH)
    time.sleep(1.0)
    pin.write(440, GPIO.LOW)
    time.sleep(1.0)

さっそく実行してみます。

[root@milkv-duo]~# python blinktest2.py
Traceback (most recent call last):
  File "/root/blinktest2.py", line 6, in <module>
    pin.write(440, GPIO.HIGH)
NameError: name 'GPIO' is not defined
[root@milkv-duo]~#

こちらは、うまく動作しませんでした。
スクリプトの修正が必要なようです。
上手く動作したら、報告いたします。

おわりに

この記事では、Lチカの例を紹介しました。
各種センサにも応用が可能です。
ぜひ試してください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?