お知らせ

  • らずぱいでIoT

らずぱいでIoT 第14回(ラズパイ4B登場)

noimage

らずぱいでIoT 第14回(ラズパイ4B登場)

かわせです。 久しぶりにらずぱいでIoTを更新します。 いよいよ日本でもRaspberry 4Bが発売されました。 ということでスイッチサイエンスさんで購入してDebian10ベースのOSを入れてみました。 やはり前にも書いた通りlibgpio仕様となっているためgpioコマンドを起動するとエラーが発生します。 Oops - unable to determine board type... model: 17 というメッセージでボードタイプが特定できないというメッセージが出て終了します。 でこれに対応するためにはどうするかというと答えはここにありました。 http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/ sudo su - で管理ユーザーになり wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb で解決いたしました。

  • らずぱいでIoT

らずぱいでIoT 第13回(C言語で制御するために、その4)

noimage

らずぱいでIoT 第13回(C言語で制御するために、その4)

かわせです。相変わらずラズパイをC言語で使う方法について調べています。 そんな中、前回GPIOにアクセスるために/sys/class/gpioによるアクセス方法をご紹介しましたが、そのドキュメントの中に重大なことが書かれておりました。 /sys/class/gpioでのアクセスは現在推奨されておらず、libgpiodというライブラリを使うように勧めています。 2020年には/sys/class/gpioは廃止されlibgpiodに変更されるようです。 libgpiodでは /dev/gpiochipN にアクセスるライブラリでNは0から始まる数字になるようです。 現在は/dev/gpiochip0しか存在しておらず1や2はありませんがひょっとすると複数のデバイスを想定しているのかもしれません。 ちなみにすでに、libgpiodはGIT HUBで公開されています。 https://github.com/brgl/libgpiod ただいま解析中のためこれ以上詳しいことは書けませんが、現在作成しているプログラムは変更しないと新しいシステムでは動作しなくなる可能性が出てくるため、ラッピング関数で同じインターフェイスから使えるような工夫をしておかないと対応に苦慮するものと思われます。 それから、SPI通信やI2C通信用のデバイスファイルは変更なく使えるようです。 また、解析できたらブログ上でご報告したいと思います。

  • らずぱいでIoT

らずぱいでIoT 第12回(C言語で制御するために、その3)

noimage

らずぱいでIoT 第12回(C言語で制御するために、その3)

前回は、メモリのアドレスと意味についてマニュアルから読み取れるというお話をしました。 C言語を使うと、ポインターに仮想メモリのアドレスを与えてあげればメモリにアクセスすることも可能でしょう。 しかし、ラズベリーパイは基本的にRasbian LinuxというOSが乗っているのでメモリーにアクセスるるためにはメモリデバイス/dev/memを介してアクセスるようにします。 ただ、/dev/mem はrootユーザにしか書込み権が与えられておらず、このデバイスに書込みアクセスるためにroot権限が必要になります。 なので、実際には/dev/gpiomem というデバイスにアクセスします。 (/dev/gpiomem にはrootグループユーザまでに書込み権が与えられています。) このデバイスファイルにCでアクセスるためにはfopenサブルーチンではなくopen システムコールを使います。 open通常のファイルアクセスではなくデバイスファイルにアクセスる場合に使い、ドライバの機能にアクセスるためのファイルディスクリプタを得ることが出来ます。 実際にメモリにアクセスするためにはmmap()関数でGPIOメモリをマッピングし、終了時にはmunmap()関数でアンマップします。 また、Rasbian Linuxでは一般ファイルとしてGPIOにアクセスることも可能で、 /sys/class/gpio 以下の export ファイルにコントロールするGPIOのピン番号を指定するとコントロール用の /sys/class/gpio/gpioxx というディレクトリが出来上がりその下にdevice,value,edge,active_low等の制御用ファイルが出来上がりこれらのファイルにアクセスすることでGPIOピンをコントロールすることが出来ます。 参考 https://www.kernel.org/doc/Documentation/gpio/sysfs.txt   この制御ファイルはC言語からだけではなく、ファイルにアクセスできればどんな言語からもアクセス可能です。

  • らずぱいでIoT

らずぱいでIoT 第3回(配線と接続確認)

noimage

らずぱいでIoT 第3回(配線と接続確認)

今回は、いよいよRaspberryPIとセンサーの結線と動作確認を行います。 ここからは、AE-BME280というセンサーモジュールのデータシートを見ながら作業を行います。 以下のURLでデータシート(秋月電子様のサイト)は入手できます。 http://akizukidenshi.com/download/ds/akizuki/AE-BME280_manu_v1.1.pdf 実際の結線をデータシートの内容と照らし合わせながら解説しますと ます左側にある「I2Cの接続方法」でI2Cで動作させるためにはJ3というジャンパをはんだ付けしてモジュールがI2C通信を行うように設定します。 右側の図は実際の結線で上側がセンサーもジュール、下側がRaspberryPIのGPIO端子で注意すべき点はセンサー側の5番ピンを3V電源(GPIO1番ピン)につなぐかGND(GPIO9番ピン)でセンサーのアドレスが変ります。 ※補足 GPIOピンには電源として+5Vと+3Vが供給されていますAE-BME280の場合1.71V~3.6V動作と書かれていますので+3Vの1番ピンを使います。 ここではデフォルトでは0x76で面白くないので+電源につないで0x77に変えてみます。 ※補足 GPIOピンの見方ですがRaspberryPI本体の基盤パターを見るとGPIOピンの1番ピンが〇ではなく□になっていることで判断できます。 実際につないでみた写真が以下です。 でこの結線があっているかを確認してRaspberryPIを起動します。 rootユーザーになり前回インストールしたi2c-toolsのコマンドで配線道理のアドレスにセンサーがあることを確認してみます。コマンドはi2cdetectというコマンドを実行委ます。オプションの -y 1 の1はI2Cデバイスの番号1を指定して、-yは対話モードを禁止しています。 0x77にセンサーもジュールが配置されていることが確認できました。