CPU温度の確認
cat /sys/class/thermal/thermal_zone0/temp
C言語によるCPU温度の取得
ソース
kenichihanasaki / rpi-cpu-temperature / source / rpi-cpu-temperature — Bitbucket
/* * File: main.cpp * Author: admin * * パイプを使ったコマンド呼び出しによるCPU温度の取得を行います。 * * Created on 2015/02/27, 20:18 */ #include <stdio.h> #include <string.h> #include <stdlib.h> /* * */ int main(int argc, char** argv) { char buffer[1024]; memset(buffer, 0, sizeof(buffer)); const char* command = "cat /sys/class/thermal/thermal_zone0/temp"; FILE* fp = popen(command, "r"); fgets(buffer, sizeof(buffer), fp); pclose(fp); printf("cpu-temperature %s\n", buffer); return 0; }
ビルド
make ./rpi-cpu-tempereture
CPU温度の監視とコマンド実行
ソース
https://bitbucket.org/kenichihanasaki/rpi-cpu-temperature-monitor/src
/* * File: main.c * Author: system * * Created on 2015/04/29, 13:17 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <stdbool.h> #define BUFFER_SIZE (512) #define INTERVAL (3) volatile bool g_running = true; /** * */ static void signalHandler(int sig) { g_running = false; } /** * */ int main(int argc, char** argv) { int max_temperature = 80 * 1000; int temperature = 0; char command[BUFFER_SIZE]; char buffer[BUFFER_SIZE]; const char* path = "/sys/class/thermal/thermal_zone0/temp"; FILE* fp = NULL; if (SIG_ERR == signal(SIGINT, signalHandler)) { exit(EXIT_FAILURE); } if(argc >= 2) { temperature = atoi(argv[1]) * 1000; if(temperature != 0) { max_temperature = temperature; } } memset(command, 0, sizeof(command)); if(argc >= 3) { strncpy(command, argv[2], BUFFER_SIZE - 1); } else { strncpy(command, "sudo halt", BUFFER_SIZE - 1); } //printf("max_temperature=%d\n", max_temperature); while(g_running) { if((fp = fopen(path, "r")) != NULL) { fgets(buffer, sizeof(buffer), fp); fclose(fp); fp = NULL; temperature = atoi(buffer); if(temperature >= max_temperature) { system(command); break; } } sleep(INTERVAL); } if(fp != NULL) { fclose(fp); } return (EXIT_SUCCESS); }
オーバークロックとダウンクロック
RaspberryPiをオーバークロックする - Qiita
/boot/config.txtの書き換え
起動時の設定ファイルにより動作クロックを変更することが出来る。詳細についてはeLinuxの資料を参考にした。
デフォルトのCPUクロックは700Mhzであることがわかる。
/boot/config.txt## Some over clocking settings, govenor already set to ondemand
##None
#arm_freq=700
#core_freq=250
#sdram_freq=400
#over_voltage=01GHzまでクロックアップするには次のようにする。
/boot/config.txt##Turbo
arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=6
見た目を整える
ここからが、手間がかかる作業になる。
箱(黒)TW型プラスチックケース:W110 x D220 x H45.3(mm)/ブラック TW11-5-22B タカチ電機工業製|マルツオンライン
箱(白)TW11-5-22G プラスチックケース|通販|フルタカパーツセンターオンライン
ケースの加工業者もあるみたいだが、使用しなかった。
この箱をドリルで、穴あけ、ヤスリで整える、という手順を繰り返して部品をつけていく。
ちなみに、はじめは、ホットカッターを使って加工しようとしたが
切断面が汚くなり、うまくいかなかった。
穴あけの例として、上のケーブルが出てるとこの穴ね。
本当に根気がいるので、がんばってガリゴリしてほしい。
電源
- 出版社/メーカー: プラネックス
- 発売日: 2010/10/15
- メディア: エレクトロニクス
- 購入: 6人 クリック: 14回
- この商品を含むブログを見る
RaspberryPiと、LEDパネルの2つに、それぞれ電源がいる。
電源からRaspberryPiに接続するケーブルは、USBからmicroUSBに変換するやつを使う。
電源からLEDパネルに接続するケーブルは、自作する。
サウンド
圧電スピーカー(圧電サウンダ)SPT15: パーツ一般 秋月電子通商 電子部品 ネット通販
TPA2006使用 超小型D級アンプキット: 組み立てキット 秋月電子通商 電子部品 ネット通販
外部のスピーカーを使う場合は、必要ないが、音を鳴らせるようにしたかったので
アンプとスピーカーをつけている、音量が小さくて、音質は悪い。
RaspberryPiのGPIOの電源とアンプを接続している。
RaspberryPiとLEDパネルの接続
RaspberryPiのGPIOのコネクタと、LEDパネルのコネクタは、ピン数が違う。
接続するためのケーブルは、自作する。
このへんの、細かい部品は、マルツパーツで、入手した。
日本圧着端子製造(JST) RA-S261T ヘッダソケット26P(MILスタンダード)
2540-16 ヘッダソケット16P(MILスタンダード)
(これで、あってるか自信ない)
圧着には、万力を使った。
RaspberryPiの固定
- 出版社/メーカー: サンハヤト
- メディア: Tools & Hardware
- この商品を含むブログを見る
上のやつは、一回貼ったら、剥がすのが大変なので、最後のほうで使おう。
LANケーブルコネクタ
ELECOM コンパクト RJ45延長コネクタ LD-RJ45JJ5Y2/E [フラストレーションフリーパッケージ(FFP)]
- 出版社/メーカー: エレコム
- 発売日: 2013/02/03
- メディア: Personal Computers
- 購入: 2人 クリック: 2回
- この商品を含むブログを見る
箱に、LANケーブルのコネクタを付ける。
固定は、ホットボンドを使った。
アクリルパネルの作成
アクリル板、アクリルケース、アクリル加工専門販売アクリルショップ「はざい屋」
図面
アクリルパネルの作成には、業者を使った。
この時点で、ハードウェアは完成。
時計のプログラムを作成する
オリジナルのソース
hzeller/rpi-rgb-led-matrix · GitHub
git clone https://github.com/hzeller/rpi-rgb-led-matrix/
改造したソース
https://bitbucket.org/kenichihanasaki/rpi-clock/src
ビルド
git clone https://kenichihanasaki@bitbucket.org/kenichihanasaki/rpi-clock.git
cd rpi-clock
make
sudo su
./clock
フォルダ構成
gpio.cc
gpio.h
led-matrix.cc
led-matrix.h
thread.cc
thread.h
修正したファイル
README.md
Makefile
main.cc
追加したファイル
bmp2array.pl
テスト用のPerlプログラム
ビットマップから配列を作成する。
関連リンク
Linux シグナル入門 - 2. シグナル・ハンドラと signal システム・コール
Gitコマンド一覧 - Qiita
16x32LEDパネルを追加する
まずは、LEDパネルを買う。
RGBフルカラードットマトリクスLEDパネル 16x32ドット: LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販
使い方
Overview | Connecting a 16x32 RGB LED Matrix Panel to a Raspberry Pi | Adafruit Learning System
上記は、英語のサイトだけど、すごく分かりやすく書いてある。
"You Will Need"が、必要な部品
"Wiring the Display"が、ケーブルの接続図
"Testing"が、動作確認
ケーブルの接触不良や、配線間違いがあると、画面がバグる。
あれー?ってなる。
GPIOピン配置
RPi Low-level peripherals - eLinux.org
上のピン配置と"Wiring the Display"を見ながら、頑張れ。
時計のプログラムを作成する - namae_ga_kimerenai’s blog
Hello Raspbian!
この時点で、下みたいに、SSHでコンソールが使える状態の前提で進める。
ちなみに、上は
#apt-upgrade
を実行中。
PCでもそうだが、時刻を同期させないと、内部時計は結構ずれる。
なので、ntpdateコマンドを使って、外部のNTPサーバーと時刻を同期させる。
ntpdate.cron
#!/bin/sh
ntpdate ntp.nict.jp ntp.jst.mfeed.ad.jp
上のやつ(ntpdate.cron)を、1時間ごとに、呼び出すため
/etc/cron.hourly
にファイルを置けばOK
起動時にシェルスクリプトを実行する。
/etc/rc.local
上記のファイルに実行したいコマンドを記述すればOK
熱対策
サーバーとして、RaspberryPiを使うので、熱対策をしたほうが、いいかもしれない。
Raspberry Pi に熱対策してみる : アジャイル株式会社
上のやつは、両面テープがついてて、貼り付けるだけだ。
らくちん。
より冷却したい場合は、ファンを使うといい。
Raspberry Piの温度対策、5Vファンの取り付け方(61度→46度) | ものづくりエクスペリメント
Hello Raspbian! - namae_ga_kimerenai’s blog