<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Raspberry Pi on 或る阿呆の記</title><link>https://hack-le.com/tags/raspberry-pi/</link><description>Recent content in Raspberry Pi on 或る阿呆の記</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Tue, 15 Sep 2026 13:39:31 +0900</lastBuildDate><atom:link href="https://hack-le.com/tags/raspberry-pi/index.xml" rel="self" type="application/rss+xml"/><item><title>ntp の make で /usr/bin/ld: cannot find -lcap エラー</title><link>https://hack-le.com/44995765-2/</link><pubDate>Tue, 04 Aug 2015 13:36:49 +0900</pubDate><guid>https://hack-le.com/44995765-2/</guid><description>&lt;p&gt;Raspbianをインストールした Raspberry Pi 2 でntp-4.2.8p3 をコンパイルする時、makeで表題のようなエラーが起きました。前にコンパイルした時は特にエラーは起きなかったのですが、今回は一度クリーンインストールしたうえで行ったので、以前は知らぬ間に入っていたライブラリが足りなかったのかもしれません。&lt;/p&gt;&#10;&lt;p&gt;「&lt;a class="link" href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a115makeerror.html" target="_blank" rel="noopener"&#10; &gt;makeで「/usr/bin/ld: cannot find」と表示されるときは － ＠IT&lt;/a&gt;」によると、&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;これは、-lオプションに続くパッケージ（ここでは「Xi」）に関連するライブラリがインストールされていないことを示している。従って、不足しているライブラリをインストールすればいい。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;とのこと。なので、apt-cache でそれらしいパッケージがないか探してみました。&lt;/p&gt;&#10;&lt;pre&gt;`pi@raspberrypi ~/src/ntp-4.2.8p3 $ apt-cache search libcap&#13; fwknop-server - FireWall KNock OPerator server side - C version&#13; libcap-dev - development libraries and header files for libcap2&#13; libcap-ng-dev - Development and header files for libcap-ng&#13; libcap-ng-utils - Utilities for analysing and setting file capabilities&#13; libcap-ng0 - An alternate POSIX capabilities library&#13; libcap2 - support for getting/setting POSIX.1e capabilities&#13; libcap2-bin - basic utility programs for using capabilities&#13; libcapi20-3 - ISDN utilities - CAPI support libraries&#13; libcapi20-dev - ISDN utilities - CAPI development libraries&#13; libcapsinetwork-dev - C++ network server library, development files&#13; libcapsinetwork0c2a - C++ network server library&#13; libcaptcha-recaptcha-perl - perl implementation of the reCAPTCHA API&#13; libcapture-tiny-perl - module to capture STDOUT and STDERR&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;libcap2 と libcap-dev がそれらしい。&lt;/p&gt;&#10;&lt;pre&gt;`$ apt-get install libcap2 libcap-dev&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;結果、libcap2 は既にインストール済みでしたが、libcap-devが入っていませんでした。その後 make してやると、今度はちゃんと通りました。&lt;/p&gt;</description></item><item><title>Raspberry Pi 1 B+ に Redmine を入れてみたがやや重い</title><link>https://hack-le.com/44942872-2/</link><pubDate>Fri, 31 Jul 2015 00:55:02 +0900</pubDate><guid>https://hack-le.com/44942872-2/</guid><description>&lt;p&gt;いい加減に少しはまともなプロジェクト管理をしたほうがよいのではないか、という話を職場でしていました。プロジェクト管理といえば Redmine が有名です。こういったツールは使いこなせればよいのでしょうが、なかなかに面倒であることも事実です。&lt;/p&gt;&#10;&lt;p&gt;まぁ、まずはやってみようかと、「&lt;a class="link" href="http://windmesser.cc/wiki/index.php?%E9%9B%91%E8%A8%98/2014-12-04" target="_blank" rel="noopener"&#10; &gt;Raspberry PI に Redmine インストール(1) - Wind Messer&lt;/a&gt;」を参考に、自宅のRaspberry Pi 1 Model B+ にインストールして、やってみました。&lt;/p&gt;&#10;&lt;p&gt;特にひっかかるところもなく、すんなりと導入できましたが…やや重い。まったく実用に堪えないかというと、そんなこともないのですが、重い。さすがに旧世代のRaspberry Piにはしんどいのだろうか。そう思って、普通のCentOS 6.6をインストールしているサーバーにRedmineを導入してみたところ、これは軽い。やはり負荷が大きかったようです。うーん、Raspberry Pi 2であればどうだろう？&lt;/p&gt;&#10;&lt;p&gt;しかし、CentOSサーバーに導入するときは色々とひっかかったのですが、Raspberry Piへのインストールは本当にすんなりといきました。この環境構築のしやすさはたいへん素晴らしいですね。&lt;/p&gt;</description></item><item><title>Raspberry Pi のGPIO経由で入力信号を連続的に取得</title><link>https://hack-le.com/44771052-2/</link><pubDate>Fri, 17 Jul 2015 01:58:08 +0900</pubDate><guid>https://hack-le.com/44771052-2/</guid><description>&lt;p&gt;矩形波をRaspberry Pi（以下RPi）のGPIOピンに入力して、それを読み出す手順をメモします。RPi 2を使用しました。シェルスクリプトによる方法と、RPiに標準で入っているRPi.GPIOを使った方法です。&lt;/p&gt;&#10;&lt;h2 id="入力の矩形波"&gt;入力の矩形波&#10;&lt;/h2&gt;&lt;p&gt;入力する矩形波は以下です。&#10;&lt;a class="link" href="//hack-le.com/wp-content/uploads/imgs/4/a/4a17af92.png" &gt;&lt;img alt="pps_sh" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/4/a/4a17af92-s.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="gpioピンの確認"&gt;GPIOピンの確認&#10;&lt;/h2&gt;&lt;p&gt;旧型モデルでは26ピン、2ではさらに拡張された40ピンです。配置は「&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;」にあるとおり。今回は基板上の12ピン目、すなわちGPIO18を使用します。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;img alt="300px-Pi-GPIO-header" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="//hack-le.com/wp-content/uploads/imgs/7/d/7db32eaf.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;引用元：&lt;a class="link" href="http://elinux.org/RPi_Low-level_peripherals" target="_blank" rel="noopener"&#10; &gt;RPi Low-level peripherals - eLinux.org&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;このピンにジャンパワイヤを指して、信号を入力します。絵としては「&lt;a class="link" href="http://shokai.org/blog/archives/8460" target="_blank" rel="noopener"&#10; &gt;橋本商会 » Raspberry PiのGPIOを使う&lt;/a&gt;」にあるような感じです。&lt;/p&gt;&#10;&lt;h2 id="シェルスクリプトによる方法"&gt;シェルスクリプトによる方法&#10;&lt;/h2&gt;&lt;p&gt;シェルスクリプトによる方法は非常に手軽で簡単です。Interface 2012年12月号のRPi特集の記事を参考に、18ピンからの入力を得る方法を書きます。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo su -&#13; $ echo 18 &gt; /sys/class/gpio/export&#13; $ echo in &gt; /sys/class/gpio/gpio18/direction&#13; $ cat /sys/class/gpio/gpio18/value&#13; -&gt; 0 or 1&#13; $ echo 18 &gt; /sys/class/gpio/unexport&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;見るだけでだいたいわかると思いますが、各行の意味を書きます。まず2行目以降のコマンドを実行するために管理者権限が必要です。2行目のexportで18ピンをオープンにしアクセスできる状態にします。次に入力なのか出力なのかを指定し、catで値を得ます。3.3Vなら1、0Vなら0が返ります。終わったら、unexportでクローズ。雑誌だとdirectionとvalueが抜けていますが、誤植でしょう。また、見当がつくと思いますが、出力の場合はinがoutになり、またcatがecho と value のセットになります。&lt;/p&gt;&#10;&lt;p&gt;このままだと値を一度しか得られません。LEDのON/OFFチェックならそれでもよいでしょうが、今回の入力は矩形波なので、連続して取得したいところです。下記に連続的に値を得られるシェルスクリプトを書きます。管理者権限のもとで実行すると、値をひたすら log.txt に出力します。Ctrl-cで終了します。&lt;/p&gt;&#10;&lt;pre&gt;`#!/bin/bash&#13; set -eu&#13; &#13; PIN=18&#13; &#13; trap "echo ${PIN} &gt; /sys/class/gpio/unexport" 1 2 3 15&#13; &#13; echo $PIN &gt; /sys/class/gpio/export&#13; echo in &gt; /sys/class/gpio/gpio${PIN}/direction&#13; &#13; while :&#13; do&#13; cat /sys/class/gpio/gpio${PIN}/value &gt;&gt; log.txt&#13; done&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;私の環境だと、だいたい1秒間に180-190点ほど取得しました。しかしながらシェルスクリプトなので、ちょっとした拍子で動作速度が変わるのか、1秒間あたりの取得点数はあまり安定せず、160点ほどになることもありました。次にPythonスクリプトによる例を書きますが、こちらはシェルスクリプトよりも高速で多少安定しています。&lt;/p&gt;&#10;&lt;h2 id="rpigpioを用いたpythonスクリプトによる方法"&gt;RPi.GPIOを用いたPythonスクリプトによる方法&#10;&lt;/h2&gt;&lt;p&gt;Pythonによる方法は色々あって、有名どころではWiringPiなどがあるようですが（「&lt;a class="link" href="https://tool-lab.com/2013/12/raspi-gpio-controlling-command-2/" target="_blank" rel="noopener"&#10; &gt;ツール・ラボ » Raspberry PiのGPIO制御方法を確認する(GPIO制御編その2)&lt;/a&gt;」、RPiには標準でRPi.GPIOなるものが用意されているので、今回はこちらを使いました。主に「&lt;a class="link" href="http://netlog.jpn.org/r271-635/2013/01/raspberry_pi_gpio_test.html" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi GPIO入出力のサンプル（Python, C言語, shellスクリプト） (r271-635)&lt;/a&gt;」を参考にさせていただきました。以下のように使います。&lt;/p&gt;&#10;&lt;pre&gt;`$ sudo python&#13; &gt; import RPi.GPIO as GPIO&#13; &gt; GPIO.setmode(GPIO.BCM)&#13; &gt; GPIO.setup(18,GPIO.IN)&#13; &gt; GPIO.input(18)&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;これも管理者権限が必要なことに注意です。参考リンク先によると、GPIO.BCMは、GPIOピンの番号でセットすることを意味します。RPiの基板上のピン番号で数える場合、GPIO.BOARDであるようです。シェルスクリプトと同様、これだけでは一回こっきりの値しか取れないので、スクリプトを書いてループにします（といっても参考記事のものとほとんど同じなのですが…）。以下です。&lt;/p&gt;&#10;&lt;pre&gt;`# -*- encoding:utf-8 -*-&#13; import RPi.GPIO as GPIO&#13; &#13; PIN = 18&#13; GPIO.setmode(GPIO.BCM)&#13; GPIO.setup(PIN, GPIO.IN)&#13; &#13; print('start\n')&#13; fp = open("log.txt","w")&#13; &#13; try:&#13; while True:&#13; value = GPIO.input(PIN)&#13; fp.write( str(value) + '\n' )&#13; except(KeyboardInterrupt):&#13; fp.close()&#13; GPIO.cleanup()&#13; print('end\n')&#13; `&lt;/pre&gt;&#13;&#10;&lt;p&gt;管理者権限で実行すると、log.txtにログが出力されます。値の取得速度はシェルスクリプトとは段違いで、私の環境だと1秒間に約125000点を取得しました。すなわちだいたい8usに1点取得していると思われます。プラマイ500点くらいの差はありましたが、シェルスクリプトに比べると安定して取得しているように思えます。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;シェルスクリプトで手軽に入力を得ることができます。今回説明をしませんでしたが、出力も簡単です。ある程度高速性を期待するなら、Pythonスクリプトが標準でモジュールも用意されておりお手軽です。C言語で実装すればもう少し早くなるかもしれませんが、苦労のほうが大きいように思います。ただし、レジスタを直接叩けば話は別で、参考雑誌によると、nsecの世界での制御が期待できそうです…が、そこまで速さに拘るならLinuxでやるのは筋が悪いような。ただ、面白そうではあるので、今度やってみようかな。&lt;/p&gt;&#10;&lt;p&gt;ついでに、今回の矩形波ですが、PPS、すなわちPulse Per Secondというやつで、きっかり1秒に1回パルス波を出力します。今回はGPSモジュールから出力しました。&lt;/p&gt;&#10;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B009KR8S9E" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe width="300" height="150" style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hackle12-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00P9BVKOK" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;</description></item><item><title>Raspberry Piならテキストよりバイナリか</title><link>https://hack-le.com/44027936-2/</link><pubDate>Thu, 14 May 2015 15:10:35 +0900</pubDate><guid>https://hack-le.com/44027936-2/</guid><description>&lt;p&gt;テキストファイルは便利です。なにしろわかりやすい。単純明快。&lt;strong&gt;csv形式は最高のフォーマットの一つ&lt;/strong&gt;だと思います。あらゆるデータはできるだけcsvで残しておきたいものです。&lt;/p&gt;&#10;&lt;h2 id="人にわかりやすいテキストコンピュータにわかりやすいバイナリ"&gt;人にわかりやすいテキスト、コンピュータにわかりやすいバイナリ&#10;&lt;/h2&gt;&lt;p&gt;しかし&lt;strong&gt;人間にとってわかりやすいものはコンピュータにとってはわかりづらい&lt;/strong&gt;。逆も又然り。コンピュータにテキストファイルを読み込ませるのは存外時間がかかる。もちろんそれが10kB程度のデータであれば何の問題もありませんが、100MBのテキストファイルとなるとどうか。昨今のコンピュータは非常に早いので、それでも問題ないかもしれませんが、やはり一瞬でというわけにはいきますまい。まして最近の小型化の流れ…Raspberry Piのような、そういった小型のコンピュータボードではどうか。なかなか厳しくなってきます。&lt;/p&gt;&#10;&lt;h2 id="raspherry-pi-に相応しいのは"&gt;Raspherry Pi に相応しいのは…&#10;&lt;/h2&gt;&lt;p&gt;そんなわけで&lt;strong&gt;コンピュータに優しいバイナリでのデータ出力というものが必要なのはいまだに変わらず&lt;/strong&gt;。最近Raspberry Pi(以下RPi)で4MB程度のcsvデータを読み込ませたのですが、PythonのNumPyを利用して13秒程度かかりました(RPi、というよりARMではPythonの実行速度がとりわけ遅いという報告もあるようです。実際Rでは3-4秒程度で読み込めた)。これはちょっと厳しい…。それをいったんバイナリデータに変換し(1.6MBになりました)、再度Pythonで読み込んでみると、こちらは60ms。瞬時。&lt;/p&gt;&#10;&lt;p&gt;これはバイナリにせざるを得ないなぁということで、バイナリとなるとデータフォーマットをどうしようか、という面倒臭い問題があります。可読性、汎用性を考えると、独自フォーマットはあまり気が進みません。&lt;/p&gt;&#10;&lt;p&gt;気象系のデータなのですが、気象系ではNetCDFというオープンなフォーマットがであるようなので、そういった標準のものを採用したいところですが、ニッチなジャンルだからか日本語の情報が少なく、調べていくとなかなかしんどそうです。主要な言語でライブラリがあるので、使うだけならすぐできそうですが、得体の知れないフォーマットを使いたくはありませんし、そうなると勉強しないと。float型でデータを吐き出すだけならフォーマットも何もなかろうしそれでもいいかな、とか、いやせっかくなのだからもうちょっと真面目に頑張ろう、とか、悩ましいところです。&lt;/p&gt;</description></item></channel></rss>