No.11, No.10, No.9, No.8, No.7, No.6, No.5[7件]
Tweet ⌚ 2021年12月5日(日) 05:34:33 情報 <2063文字>
貧者のラーツー・装備品解説
キャンプツーリングは楽しい! 楽しいんだけど…準備したり後片付けしたりがかなり面倒!!って事なんでついつい疎遠になっちゃうっていうかなかなか実行に移せないんだけどそれでもやっぱりお外で何かしたい!って気分をお手軽にどうにかしてプチ・アウトドア気分を満喫できるラーメンツーリング略してラーツーが大好きな感じなんですが「それどんな装備でやってんの??」ってお問い合わせをぼつぼつ頂いたりするんでせっかくなんで解説したいと思います
まぁ安め狙いの装備なんで映えませんが(-_-;)
そんな装備品は100均の巾着袋に収まる感じです
どっか景色のいいお気に入りの場所でお湯を沸かしてカプ麺を作って仕上げに即席コーヒーを楽しむって辺りまで実現できる装備をお安くコンパクトにまとめてみました
中身を広げてみた 更に詳しく解説していきましょう
季節により使わないかもだけど…虫除けスプレーと軍手
アルミ製ぺんぺんの風防と割り箸とスティック型・インスタントコーヒーと水筒です 水筒は 500ml のもので水道水が入ってます
某Dイソーで売ってた 450ml くらい入るらしいデカ目の(たぶん)ステンレス製のマグカップとシリコン製のフタと 98 円以下で買ってくるカプ麺 デカ目のマグカップはそのままコッヘルとして使うっていうかこれでお湯を沸かします フタは少ない燃料でお湯を沸かす際に必須となるので何があっても用意したい感じです
ちなみにカプ麺はこんな感じでマグカップにスタッキングできます スタッキングが可能になるのでカプ麺のサイズ・形状が限定されてしまいますが…まぁこのサイズのカプ麺はお値打ちなんで納得しちゃう!(>_<)w
使用する燃料は「ゲルネン着火剤 25g 8個入り」か「パック燃料 27g 4個入り」です ゲルネン着火剤はホームセンターで見かけることがあります パック燃料は某Dイソーで売ってることがあります 内容量に微妙な違いがあるけど性能的にはどちらも同じ感じかな?ってイメージなんで…その時々の入手性の良いほうを選んでるって感じです
ただこの燃料にそのまま点火すると結構な勢いで燃え盛ってしまうっていうか早々に燃え尽きてしまうので…アルミ箔で周囲と底面を包んで燃焼範囲を制限して持続力を延長できる細工を施しています こうして無駄な放熱を抑制することにより気温 0℃ の環境下でも 500ml の水をギリ沸騰させることができます 夏場とかならそれほど気にすることではないのだけど…真冬だと最高の効率を求めないと沸騰する前に燃え尽きてしまう感じです
そしてコンパクトに収納できるエスビット・ポケットストーブ…のパチものっていうか某Aマゾンで 300 円チョイで買ってきたエスビットと同サイズの固形燃料ストーブです→ https://www.amazon.co.jp/gp/product/B00F... ポーチ付きでした
同等品と思われるエスビット・ポケットストーブっぽいストーブが某Dイソーで売られていたんでコレでもいいかも知れません
最大限の熱効率を得られるように…シーチキン缶をぱっかんした時のフタを折り曲げてセッティングしています 無くてもいいかもだけど…コレがあるとお湯が早く沸くなぁってイメージです
それではコッヘル(マグカップ)に水を 350ml くらい入れてパック燃料に点火してみましょう 点火しづらい時は…パック燃料を仕込んだストーブごと持ち上げてひっくり返すような格好にすると簡単に火が付きます
そしてお湯が沸くまでのこの待ち時間に周囲の自然を満喫しよう! 最高に楽しい時間すぎる!!(>_<)w
ラーツーは楽しい(定型文)
カプ麺にお湯を注いで 3 分待つ間に…食後のコーヒー用っていうか残りの 150ml くらいの水を沸かしておくのを忘れずに!
そんな食後のコーヒーでほっと一息
お家で飲むと心もちイマイチなお味のスティック型・インスタントコーヒーだけど…大自然に囲まれた中で頂くと本当に美味しい!
そんな感じでごちそうさまでした! ゴミなど一切の痕跡を残さないようコンパクトに収納して撤収です
コンパクトさ故っていうか…イスもテーブルも無いんでその辺は現地調達となります でもまぁそれもアリかな!って思っちゃうww
そんなこんなな不要な物を削りに削って必要最小限な装備をできるだけお安く!ってコンセプトでまとめたラーツー装備でした そんなに頑張らなくても楽しめるラーツーがもっと流行るといいですね! 概ね貧乏装備すぎてあ んまり参考にならないかもだけど(汗 #アウトドア
Tweet ⌚ 2021年12月4日(土) 06:21:41 趣味 <1952文字>
Perl の GD::Simple モジュールでフォントを指定したりしてみるメモ
初期のインターネットっていうか Web サイト黎明期の CGI と云えば Perl でキマリ!!って時代もありましたよね…って感じすらすっかり忘れ去られたかのように近年では全く話題にもならない Perl ですが「三つ子の魂百まで」なのか何なのかあまりにも手に馴染みすぎてついつい使っちゃうって事はありませんか? 私はあります いやむしろ未だに他の言語が使えず Perl にどっぷりなんです悪いか!!(-_-#)って事なのか何なのかそんな忘れ去られつつある言語である Perl と…その Perl で画像を扱う GD ライブラリの(主に文字フォント系の)使い方を少しばかり探求してみたかなりニッチな需要的な忘れ物防止メモです
そんな Perl の GD ライブラリですが…以下のようにコマンド一発で簡単にインストールできます
sudo apt install libgd-perl
依存関係とか詳しく調べてないんでアレだけど…ちょっと見た感じでは我が家の環境にいつの間にか libgd-text-perl なんてのも入っていたんで文字フォントの扱いに不具合が発生した時には sudo apt install libgd-text-perl してみるのもいいかもです(汗
あーあと標準的な Raspberry Pi OS のセットアップではゴシック書体の日本語フォントしか入ってないっぽい? 後に説明するけど…フォント名に Sans とだけ付いてるフォントは概ねゴシック書体です 明朝書体には Serif と付くらしいんだけどラズパイにはそれが入ってないみたい?なんで…後の動作確認しやすいように明朝書体が含まれる程よいフォントを追加でインストールしておきます
sudo apt install fonts-ipaexfont
日本語フォントファイルってのはそれなりに容量が大きいんで…少容量 microSD とかで運用してる方などには要注意かもですがまぁその辺はうまいことどうにかしてやってください(瀧汗
※ 追記 ※
Google の「No more 豆腐」と呼ばれるフォントのインストール方法
sudo apt install fonts-noto-cjk
中国語(C)と日本語(J)と韓国語(K)が一緒くたに入っちゃう感じっぽいです
そんな下準備が済んだトコロで…現在システムに入ってるフォントの一覧を取得する方法です それには fc-list ってコマンドを使うんだけど…日本語に非対応なフォントとかも羅列されて心もち見づらいんでその辺を絞り込んで表示させてみましょう
fc-list :lang=ja | sort | uniq
sort と uniq は並べ替えてダブり行を除去してくれるんで見やすくなると思います
ここで表示される内容は…フォントのパス付きファイル名とフォントファミリー名とスタイルです 後に説明する GD のフォント指定で…何となくフォントのパス付きファイル名で指定してたんだけどそれではダメでデフォルトのフォントが使用され続けてて悩んでたんだけどどうやら「フォントファミリー名:スタイル」で指定するといいって事を突き止めたんで
fc-list -f '%{family}:%{style}\n' :lang=ja | sort | uniq
このようなオプション指定で実行するといいと思います
実行すると(環境によって違うと思うけど)こんな感じの一覧が出ます
Droid Sans Fallback:Regular
IPAexゴシック,IPAexGothic:Regular
IPAex明朝,IPAexMincho:Regular
Noto Sans CJK JP,Noto Sans CJK JP Black:Black,Regular
Noto Sans CJK JP,Noto Sans CJK JP Bold:Bold,Regular
Noto Sans CJK JP,Noto Sans CJK JP DemiLight:DemiLight,Regular
Noto Sans CJK JP,Noto Sans CJK JP Light:Light,Regular
Noto Sans CJK JP,Noto Sans CJK JP Medium:Medium,Regular
Noto Sans CJK JP,Noto Sans CJK JP Regular:Regular
Noto Sans CJK JP,Noto Sans CJK JP Thin:Thin,Regular
Noto Sans CJK KR,Noto Sans CJK KR Black:Black,Regular
---- 中略 ----
この中から使いたいフォントの行をコピーして後の GD のフォント指定に使用するといい感じに使えるようです そして今後は「IPAex明朝,IPAexMincho:Regular」を使って話を進めていきます
それでは早速その辺を使ったサンプルを作ってみますかね
----------
#!/usr/bin/perl
use GD::Simple;
$img_obj = GD::Simple->new(500, 500);
$img_obj->font('IPAex明朝,IPAexMincho:Regular'); # フォント
#$img_obj->font('/usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf'); # このフォント指定じゃダメみたい
$img_obj->fgcolor('red'); # 文字色
$img_obj->fontsize(30); # フォントサイズ
$img_obj->moveTo(20, 100); # 始点 x, y
$img_obj->string("日本語フォント表示\nRaspberry Pi\n1234567890"); # 文字列(最後に記述)
# ファイルへ出力
#open(IMG, "> gd_out1.gif"); # GIF で出力
#open(IMG, "> gd_out1.jpg"); # JPEG で出力
open(IMG, "> gd_out1.png"); # PNG で出力
binmode IMG; # バイナリ・ストリームへ書き込む
#print IMG $img_obj->gif(); # GIF で出力
#print IMG $img_obj->jpeg(100); # JPEG (品質:0〜100) で出力
print IMG $img_obj->png(); # PNG で出力
close(IMG);
----------
実行すると以下のような感じの画像が生成されると思います
今回は PNG で保存してみましたが GIF や JPEG でも保存できます 「ファイルへ出力」の辺りのコメントアウトしてある部分で切り替えられるんで試してみてください
:
そんな Perl で画像を生成するって話だと…既存の画像を読み込んで文字とかを描き込んで使いたい場合があると思います そんな時には以下のように指定します
[サンプル画像]
----------
#!/usr/bin/perl
use GD::Simple;
#$img_obj = GD::Simple->newFromGif("./gd_test2.gif"); # GIF 画像の時
#$img_obj = GD::Simple->newFromJpeg("./gd_test2.jpg", 1); # JPEG 画像の時 最後の「1」は True Color のフラグ?(未解明)
$img_obj = GD::Simple->newFromPng("./gd_test2.png", 1); # PNG 画像の時 最後の「1」は True Color のフラグ?(未解明)
$img_obj->font('IPAex明朝,IPAexMincho:Regular'); # フォント
$img_obj->fgcolor('red'); # 文字色
$img_obj->fontsize(30); # フォントサイズ
$img_obj->moveTo(20, 100); # 始点 x, y
$img_obj->string("日本語フォント表示\nRaspberry Pi\n1234567890"); # 文字列(最後に記述)
# ファイルへ出力
#open(IMG, "> gd_out1.gif"); # GIF で出力
#open(IMG, "> gd_out1.jpg"); # JPEG で出力
open(IMG, "> gd_out1.png"); # PNG で出力
binmode IMG; # バイナリ・ストリームへ書き込む
#print IMG $img_obj->gif(); # GIF で出力
#print IMG $img_obj->jpeg(100); # JPEG (品質:0〜100) で出力
print IMG $img_obj->png(); # PNG で出力
close(IMG);
----------
実行すると以下のように読み込んだ画像の上に文字を描き込んだ画像が出力されます
ちゃんと文字が描き込まれていますね なお色数の多い JPEG と PNG は True Color フラグとなる「1」を指定しておかないと色が正しく再現されないような感じでした
:
お次は複数の画像を読み込んで 1 枚の画像に合成するってのをやってみます
[サンプル画像]
----------
#!/usr/bin/perl
use GD::Simple;
$img_obj = GD::Simple->new(500, 500, 1); # 最後の「1」は True Color のフラグ?(未解明)
$img_gif = GD::Image->newFromGif("./gd_test2.gif"); # GIF 画像の時
$img_jpg = GD::Image->newFromJpeg("./gd_test2.jpg", 1); # JPEG 画像の時 最後の「1」は True Color のフラグ?(未解明)
$img_png = GD::Image->newFromPng("./gd_test2.png", 1); # PNG 画像の時 最後の「1」は True Color のフラグ?(未解明)
# 参考までに…読み込んだ画像の簡易な情報を表示
($width, $height) = $img_gif->getBounds();
$is_truecolor = $img_gif->isTrueColor();
print "GIF:[$width][$height][$is_truecolor]\n";
($width, $height) = $img_jpg->getBounds();
$is_truecolor = $img_jpg->isTrueColor();
print "JPG:[$width][$height][$is_truecolor]\n";
($width, $height) = $img_png->getBounds();
$is_truecolor = $img_png->isTrueColor();
print "PNG:[$width][$height][$is_truecolor]\n";
# コピー元オブジェクト, コピー先X座標, コピー先Y座標, コピー元X座標, コピー元Y座標, 横サイズ, 縦サイズ
$img_obj->copy($img_gif, 0, 150, 200, 140, 200, 200); # GIF 画像をコピーする
$img_obj->copy($img_jpg, 180, 280, 240, 135, 200, 200); # JPEG 画像をコピーする
$img_obj->copy($img_png, 300, 100, 140, 140, 200, 200); # PNG 画像をコピーする
$img_obj->font('IPAex明朝,IPAexMincho:Regular'); # フォント
$img_obj->fgcolor('red'); # 文字色
$img_obj->fontsize(30); # フォントサイズ
$img_obj->moveTo(20, 100); # 始点 x, y
$img_obj->string("日本語フォント表示\nRaspberry Pi\n1234567890"); # 文字列(最後に記述)
# ファイルへ出力
#open(IMG, "> gd_out1.gif"); # GIF で出力
#open(IMG, "> gd_out1.jpg"); # JPEG で出力
open(IMG, "> gd_out1.png"); # PNG で出力
binmode IMG; # バイナリ・ストリームへ書き込む
#print IMG $img_obj->gif(); # GIF で出力
#print IMG $img_obj->jpeg(100); # JPEG (品質:0〜100) で出力
print IMG $img_obj->png(); # PNG で出力
close(IMG);
----------
実行すると以下のように読み込んだ画像の指定範囲を切り抜き合成してその上に文字を描き込んだ画像が出力されます
なお画像の copy にはパラメータを全て指定する必要があるようです ちょっと面倒ですね(-_-;) 今回は指定範囲を切り抜くような形でコピーしたけど…サイズが不定な画像を読み込んだ際に正しく範囲指定できるように読み込んだ画像サイズを取得できる getBounds ってのも使っているので参考までに
なお既存のファイルを読み込む際に newFromGif や newFromJpeg や newFromPng といった感じに予め画像フォーマットを知っておく必要があるようです しかしざっと調べた感じでは GD で画像フォーマットを調べる術がないようなんで…ちょっと困りますね
そこで標準的に用意されている file コマンドを使って画像フォーマットを調べるサンプルを即興で用意してみました
----------
#!/usr/bin/perl
$cmd = 'file -b -i'; # file コマンドを使う
$file = './gd_test2.gif'; # 画像ファイル名 [GIF]
#$file = './gd_test2.jpg'; # 画像ファイル名 [JPEG]
#$file = './gd_test2.png'; # 画像ファイル名 [PNG]
chomp($res = `$cmd $file`); # コマンドを実行して出力を取り込む
if ($?) { die "Command error:"; } # 何らかのエラーが発生
print "$res\n"; # コマンドを実行した出力はこんな感じ
if ($res =~ /^cannot open/) { # file コマンドが何らかのエラーを返した
print "File error: $file\n";
} elsif ($res =~ /^image\/gif;/) { # GIF ファイルらしい
print "[\$img_obj = GD::Simple->newFromGif(\"$file\"); を使う]\n";
} elsif ($res =~ /^image\/jpeg;/) { # JPEG ファイルらしい
print "[\$img_obj = GD::Simple->newFromJpeg(\"$file\"); を使う]\n";
} elsif ($res =~ /^image\/png;/) { # PNG ファイルらしい
print "[\$img_obj = GD::Simple->newFromPng(\"$file\"); を使う]\n";
} else { # それ以外のファイルっぽい
print "扱えないファイルです(-_-;)\n";
}
----------
file コマンドについて詳しく調べてないんでアレなんだけど…これで概ね画像フォーマットを特定できると思います この辺ちょっと面倒ですね(-_-;)
まぁそんなこなんで時既に情報が古すぎて調べられない GD::Simple のアレこれをまとめてみました この GD::Simple は…その昔の N88-Disk Basic の LINE 文や CIRCLE 文とかでお絵描きしてた頃のようなシンプルな操作で作画できて懐かしく思ったりしながら愛用しています しょーみこれを今さらわざわざ使おうって思う人も居ないかなーって思いつつ今後の参考ってことで残しておきます 長々とお疲れさまでした! #[Raspberry Pi] #Perl
Tweet ⌚ 2021年11月20日(土) 10:26:41 情報 <7610文字>
Arduino Leonardo (Pro Micro) でマルチメディアキーボードを作ろう!
前回に引き続き Arduino 的な諸々をひとつって事で…マルチメディア・キーボードって云うんですかね?
+α的に実装されている音量調節などのキーとかノート PC でよく見かける Fn キーと併用して使える再生とか早送りなどのキーを ATmega32U4 を搭載した Arduino Leonardo (Pro Micro) でどうにかしてみるお話です
そんな今回の実験の様子
以前のマウスクリック超連射実験の回路がくっついたままなんで判りにくいですよね…
申し訳程度に回路図を描いてみたけど…それでも判りづらいですよね(汗 まぁとにかく 2 番ピンと 3 番ピンを使用しました
今回のマルチメディア・キーボード(?)的な機能を簡単に実装するためにライブラリを追加してみました
Arduino IDE で [スケッチ] → [ライブラリをインクルード] → [ライブラリ管理] してライブラリ管理画面を出す
目的のライブラリを「hid」ってキーワードで検索して…出てきた「HID-Project」をインストールする ※画面は既にインストール済みだけどまぁそんな感じで(汗
後は Arduino IDE でこんな感じのを用意してそれをマイコンボードに書き込みます
----------
// include the HID library
#include "HID-Project.h" // 今回インストールしたやつをインクルードする
// definitions for each pin used
const int pinLed = LED_BUILTIN;
const int playButton = 2; // 今回使うピン番号
const int fwdButton = 3; // 今回使うピン番号
const int backButton = 4; // 以下今回は使わない(-_-;)
const int volUpButton = 5;
const int volDwnButton = 6;
const int muteButton = 7;
void setup() {
// define the pin mode for each pin used
pinMode(pinLed, OUTPUT);
pinMode(playButton, INPUT_PULLUP); // 今回使うピン番号
pinMode(fwdButton, INPUT_PULLUP); // 今回使うピン番号
pinMode(backButton, INPUT_PULLUP); // 以下今回は使わない(-_-;)
pinMode(volUpButton, INPUT_PULLUP);
pinMode(volDwnButton, INPUT_PULLUP);
pinMode(muteButton, INPUT_PULLUP);
// begin HID connection
Consumer.begin();
}
void loop() {
if (!digitalRead(playButton)) {
digitalWrite(pinLed, HIGH); // turn on LED
Consumer.write(MEDIA_PLAY_PAUSE); // 一時停止・再生的なコマンド
delay(500); // 動作確認用の LED 点滅
digitalWrite(pinLed, LOW); // turn off LED
}
if (!digitalRead(fwdButton)) {
digitalWrite(pinLed, HIGH);
Consumer.write(MEDIA_NEXT); // 次の曲的なコマンド
delay(500); // 動作確認用の LED 点滅
digitalWrite(pinLed, LOW);
}
}
----------
Ubuntu 20.04.3 LTS と Audacious 3.10.1 で動作チェックしたところ…「再生/一時停止」と「次の曲」の動作をタクトスイッチの押下にて実現できました やったね!
わりと入手しづらいイメージのマルチメディア・キーボード(?)の拡張部分を Arduino Leonardo (Pro Micro) でどうにかできる事が判明しました 後は程よいケースとスイッチを用意すれば完成なんだけど…それはまた後の話ってかんじで
:
他にも機能があるっていうか…キーコードは Arduino/libraries/HID-Project/src/HID-APIs/ConsumerAPI.h に定義されています ※ファイルの場所は環境によって異なる場合があります
enum ConsumerKeycode : uint16_t {
// Some keys might only work with linux
CONSUMER_POWER = 0x30,
CONSUMER_SLEEP = 0x32,
MEDIA_RECORD = 0xB2,
MEDIA_FAST_FORWARD = 0xB3,
MEDIA_REWIND = 0xB4,
MEDIA_NEXT = 0xB5,
MEDIA_PREVIOUS = 0xB6,
MEDIA_PREV = 0xB6, // Alias
MEDIA_STOP = 0xB7,
MEDIA_PLAY_PAUSE = 0xCD,
MEDIA_PAUSE = 0xB0,
MEDIA_VOLUME_MUTE = 0xE2,
MEDIA_VOL_MUTE = 0xE2, // Alias
MEDIA_VOLUME_UP = 0xE9,
MEDIA_VOL_UP = 0xE9, // Alias
MEDIA_VOLUME_DOWN = 0xEA,
MEDIA_VOL_DOWN = 0xEA, // Alias
CONSUMER_BRIGHTNESS_UP = 0x006F,
CONSUMER_BRIGHTNESS_DOWN = 0x0070,
CONSUMER_SCREENSAVER = 0x19e,
CONSUMER_PROGRAMMABLE_BUTTON_CONFIGURATION = 0x182,
CONSUMER_CONTROL_CONFIGURATION = 0x183,
CONSUMER_EMAIL_READER = 0x18A,
CONSUMER_CALCULATOR = 0x192,
CONSUMER_EXPLORER = 0x194,
CONSUMER_BROWSER_HOME = 0x223,
CONSUMER_BROWSER_BACK = 0x224,
CONSUMER_BROWSER_FORWARD = 0x225,
CONSUMER_BROWSER_REFRESH = 0x227,
CONSUMER_BROWSER_BOOKMARKS = 0x22A,
今回使った MEDIA_PLAY_PAUSE と MEDIA_NEXT の他にもいろいろあります 例えば CONSUMER_BROWSER_REFRESH を超連打して…いわゆる F5 アタックを実装するのもいいかもしれません ※やめて!(>_<)q
:
まぁざっくりこんな感じですかね これを用いてちょっと便利な補助キーボードを作れるとイイナ! #Arduino
Tweet ⌚ 2021年11月14日(日) 11:38:29 情報 <3322文字>
Arduino Leonardo (Pro Micro) でマウスクリック連射装置を作ろう!
ワンボードマイコンっていうか…ここんとこ Arduino が人気沸騰で気になりますよね!って事なんでモノは試しに安っすい VKLSVAN Pro Micro USB ATmega32U4 を買ってぼちぼちイジってみることにしました
まぁなんか Arduino にもいろいろあるようで…その中で ATmega32U4 を搭載した Arduino Leonardo と呼ばれるものが HID 機能を搭載しているって事で気になっていました そんな Arduino Leonardo の互換機が今回購入した Pro Micro って感じです
その HID 機能とはなんぞや?って話ですがまぁざっくり PC の標準的なキーボードやマウスを指すようです 要するに USB 接続した Arduino Leonardo (Pro Micro) がキーボードやマウスに化けるって事なんですね
そこで今回は連打系ブラウザゲーとして名高い CookieClicker を超連射できるボタンを実装してみることにしました
そんな Pro Micro のピン配列図 なんかいろいろ書いてあるけど…単純な On/Off スイッチを付ける場合は Arduino と色付けされた 0 から 20 までのピンを使うようです
それを今回はこんな感じで 10 番ピンに配線しました
そしてお次はそれを制御するプログラムで…
----------
#define RX_LED 17 // RX LED はポート 17 っぽい?
#define TX_LED 30 // TX LED はポート 30 っぽい?
#define SW 10 // スイッチ用
#include <Mouse.h> // マウス機能を使いたい
void setup() {
pinMode(SW, INPUT_PULLUP);
Mouse.begin();
}
void loop() {
if(!digitalRead(SW)) {
digitalWrite(TX_LED, LOW); // TX LED を点灯
//Mouse.click();
//delay(100);
Mouse.press(MOUSE_LEFT);
//delay(17); // 最速
delay(20);
Mouse.release(MOUSE_LEFT);
//delay(9); // 最速
delay(10);
digitalWrite(TX_LED, HIGH); // TX LED 消灯
} else {
digitalWrite(RX_LED, LOW); // RX LED を点灯
delay(40);
digitalWrite(RX_LED, HIGH); // RX LED 消灯
delay(20);
}
}
----------
Arduino IDE でこんな感じのを用意してそれをマイコンボードに書き込みます 書き込まれた後に直ちに動作を開始します
スイッチが Off の時には基板上の LED が細かく点滅しています スイッチを On にするとマウスクリックの連射が始まります
マウスのクリックには Mouse.click(); って関数と Mouse.press(); Mouse.release(); とを選べるようです
Mouse.click(); は…いい感じに「押して離す」をまとめて実行できるようです
Mouse.press(); は…ドラッグ操作っていうんですかね この関数を実行するとマウスボタンが押されたままになり Mouse.release(); を実行するとマウスボタンが離されます
どちらの関数をどのようなタイミングで繰り返すかは個々の環境によって違うかと思いますが…
我が家の環境では Mouse.press(); Mouse.release(); を使って 1 秒間に 38 連射を記録しました → マウスクリック連射速度テスト
高橋名人もびっくりな超高速連射を実装できて満足しました!
Arduino Leonardo (Pro Micro) の HID 機能は手軽に有用な機能を実装できてなかなか楽しいです またぼちぼちイジっていきたいと思いました #Arduino
Tweet ⌚ 2021年11月13日(土) 07:23:46 情報 <1926文字>
ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3
・ラズパイとファイルのやり取りしたい
・ラズパイのアプリを PC 上で実行する?
:
----- ラズパイとファイルのやりとりしたい -----
ファイル共有に samba サーバを建てるほどじゃないんだけど… PC とちょっとしたファイルのやりとりをしたい!って場面はちょくちょくあると思います そんな時は scp コマンドを使うと良いみたいです
使い方
scp [オプション] コピー元 コピー先
オプションはいろいろあるけど…よく使うものを勝手に抜粋(汗
-p 元のファイルの変更時間とアクセス時間およびモードを維持します
-r ディレクトリ全体を再帰的にコピーします
PC からラズパイにファイルを送信する その1
scp ./dir/filename.ext pi@hostname:
PC 上の ./dir/filename.ext ってファイルをラズパイにコピーする この場合…ユーザ pi のホームフォルダ (/home/pi) に filename.ext がコピーされる
ラズパイから PC にファイルを受信する その1
scp pi@hostname:/var/www.html/index.html ./
ラズパイ上の /var/www.html/index.html が PC 上のカレントフォルダに index.html としてコピーされる
PC からラズパイにフォルダを送信する その2
scp -pr ./pic pi@hostname:
PC 上の ./pic ってフォルダとその中身の全てをファイル更新日時・モードを保持したままラズパイにコピーする この場合…ユーザ pi のホームフォルダ (/home/pi) に pic フォルダを作成してコピーする
ラズパイから PC にフォルダを受信する その2
scp -pr pi@hostname:/etc/apache2 ./
ラズパイ上の /etc/apache2 ってフォルダとその中身の全てをファイル更新日時・モードを保持したまま PC に apache2 フォルダを作成してコピーする
※ ただし /etc/apache2 はユーザ pi で読めるけど…逆に書き込もうとすると root 権限が無いんで失敗しますが
hostname は IP アドレスでも OK です ファイル名にはワイルドカードも使えるようです
2018 年 4 月頃のアップデートで Windows 10 に OpenSSH ってのが導入されているらしく…その時に scp コマンドが入ったようです
試しに使ってみたところちゃんとコピーできたようです
:
----- ラズパイのアプリを PC 上で実行する? -----
ラズパイ上で動くアプリケーションの画面を PC 上に持ってくることができるようです
使い方
ssh [オプション] pi@hostname
オプションはいろいろあるけど…よく使うものを勝手に抜粋(汗
-Y 信頼できるX11転送を有効にします
-C データ転送を圧縮します
普通に SSH による接続なんですが…ファイルマネージャ (pcmanfm) とかのグラフィカルなアプリケーションの実行画面を PC 上で再現できるようになるようです
SSH でログインした後にコマンドラインに実行したいアプリケーションのコマンドを打ち込み実行します
pcmanfm :ファイルマネージャ
lxtask :タスクマネージャ
lxterminal :LXTerminal
例えば上記のようなコマンドです
Ubuntu MATE 上に再現されたラズパイのアプリケーション画面 心もち再現しきれてないものもあるけどご愛嬌かな
ファイルマネージャからイメージビューワなんかを起動するとその画面も PC 上に出てきます
ただしログインしたユーザ権限で動作できるアプリケーションに限るようです
macOS 系ではできたって話を聞いたことがあります Windows 系ではできないかも知れません(汗
そろそろネタが尽きてきたかな…って感じで長々とお疲れさまでした! #[Raspberry Pi] #コマンドヘルプ
●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3
●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2
●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1
●ラズパイで Apache2 サーバを建ててゆるい設定をする
●モニタ無しでラズパイを VNC 接続できるとこまでセットアップ
Tweet ⌚ 2021年10月24日(日) 16:41:43 情報 <2042文字>
ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2
・テキストエディタ nano の超基本の使い方
・ユーザを切り替えて root で作業したい
・ラズパイは sudo した時にパスワードを聞かれないのは何故?
:
----- テキストエディタ nano の超基本の使い方 -----
端末上(LX Terminal等)でテキストファイルを編集するには vi か nano を使うことになるんだけど… vi は操作感が少々特殊でとっつきにくいんでその辺が判りやすい nano を使うことが多いのかな?って事でその nano を初めて使う方向けの超基本の使い方の解説です
コマンド名は nano です 管理者権限で使いたい時は sudo nano って感じで使います
nano もしくは sudo nano とコマンド名のみで起動すると「新規ファイル」の編集として起動します nano 「ファイル名」 とファイル名を付けて起動すると「ファイル名のファイル」を編集します
nano とだけ打ち込み起動した状態
よく使う(と思われる)コマンドが下部に記載されています
この中の 「^G ヘルプ」 とか 「^X 終了」 の「^」意味は以下のようになっています
ショートカットキーの記法は以下の通りです。(^)で表記されているショートカットはCtrlキーを押すか、Escキーを二回続けて押すことを表してします。(M-)で表記されているショートカットはAltキー、Cmdキー、Escキーなどのメタキーを押して入力します。
また、Escキーを二回押した後に000から255までの十進数を入力することで、コードに対応する文字を入力することができます。以下のキーストロークは主なエディタのウィンドウで使用できます。代替のキーストロークは括弧で囲って表記されます。
試しに Ctrl キーを押しながら G キーを押してみましょう
nano のヘルプが表示されました
長くて表示しきれてないんでキーボードの ↑ キーと ↓ キーを使ってスクロールさせます
ヘルプの終了は Ctrl キーを押しながら X キーを押します
いっぱいコマンドがあって覚えきれなさそうだけど…実際には「ちょっと編集を」って感じなんで数個のコマンドを使うだけになると思います
そんなよく使うコマンド例
Ctrl + X :nano の終了 ファイルに変更がなければそのまま終了します 変更があれば保存するか破棄するか聞いてきます
Ctrl + O :ファイルの書き込み 新規ファイルとして編集していればファイル名を聞いてきます 既存ファイルを編集していればそのファイル名が表示されそこに保存します
Ctrl + S :ファイルを確認なしで保存する 慣れてくるとこれをよく使います
Ctrl + W :文字列の検索 指定した文字列が見つかればカーソルがその文字列の場所に移動する さらに次の文字列を探す場合には Alt + W もしくは Alt + ↓ で…逆向きに探す場合には Alt + Q もしくは Alt + ↑ と操作します
Ctrl + / :文字列の置換 探す文字列を指定した後に置き換える文字列を指定します 見つかった時に「1箇所置換」するか「全部を置換」するかを聞いてきます
Alt + # :コメント行の切り替え カーソルがいる行の先頭に # を付ける/付けないを繰り返す わりと便利なんでよく使う
だいたいこんなもんですかね しょーみもっと込み入った編集をしたい時には GUI で操作できる mousepad とかを使ったほうが判りやすくて便利だと思います ただ nano は諸々の設定作業なんかで「使わない訳にはいかない」テキスト・エディタなんで最低限の操作は覚えておきたいものです
:
----- ユーザを切り替えて root で作業したい -----
サーバの設定をしてる時とかに…いちいち sudo + コマンド ってやるんがめんどくさい!!(-_-#)って時に感情に任せて root にチェンジして作業したいと思ったことはありませんか? 私はたまにあります…って事なんでその辺の話を少々
通常はユーザ pi で作業してるんだけどこれをユーザ切り替えの su コマンドを使って管理者 root になろうとするんだけど…認証失敗して root になれません これは root にパスワードが設定されてないんで「パスワードによる認証ができない」ってのが原因のようです
まぁこれを解決するには root にパスワードを設定すればいいんだけど…世間的にはセキュリティ云々の事情で root にパスワードを設定すべきではないって事なんでちょっと躊躇しちゃいますね ※ root にパスワードを設定すると SSH などで root ログインできるようになるんで好ましくないらしいのです
しかしこれが実機の前に居るのであれば別の方法でどうにかできます LXTerminal を sudo で起動してみましょう
sudo x-terminal-emulator
無事(?)に root に切り替えることができました
でもまぁ何でもできる管理者 root なんで…くれぐれも慎重な操作をお願いします(汗
※ 追記 ※
別のシェルでログインを試みるって手法をもっと試してみるっていうか…なんか su コマンドにシェルを指定するオプションがあるのに気づいたんでそっちも試してみることにします
sudo su -s /bin/bash root
これで root に切り替えることができました こっちのほうがスマートな操作って感じなのかな
ちなみにオプション指定の違いがあるっていうか…
sudo su -s /bin/bash root
sudo su -s /bin/bash - root
「-」オプションを付けない時はコマンドを実行したユーザのホームディレクトリ・環境変数が引き継がれて
「-」オプションを付た時は指定したユーザのホームディレクトリ・環境変数に設定されるようです
※ さらに追記 ※
もうちょっとシンプルにっていうか sudo -i や sudo su や sudo su - でもいいみたい
この場合もそれぞれ環境変数の引き継ぎに違いがあったりするようです 使いやすい手法を覚えておきタイネ!
:
----- ラズパイは sudo した時にパスワードを聞かれないのは何故? -----
Ubuntu などを使っている時に sudo すると…
パスワードを聞かれます
でも Raspberry Pi OS の sudo だとパスワードを聞かれません これは何故なんでしょう?
まぁ sudo がそう云う設定になってるんですけどね…って事でその設定を見てみましょう sudo の設定内容は sudo cat /etc/sudoers で確認することができます
その中に %sudo ALL=(ALL:ALL) ALL なんて行があります これはグループ sudo に属する全てのユーザが全てのコマンドを実行できるって定義らしいです
それではグループ sudo に誰が属しているのか見てみましょう これは sudo getent group sudo で確認できます おそらく sudo:x:27:pi ってなってると思うんだけど…まぁグループ sudo にユーザ pi が含まれているのが判ります この設定によりユーザ pi が sudo した時に全てのコマンドが使えるって事になるらしいです
ちなみに /etc/sudoers は極めて重要なファイルなんで直接編集しないほうがいいらしいです これを編集するには専用コマンドの sudo visudo を使います なんでも書き込んだ内容に間違いがないか構文チェックして正しければ書き込むって感じになってるらしいです
まぁそれはともかく sudo した時にパスワードを聞かれないって話でしたよね これはさらに細やかな設定ファイルが /etc/sudoers.d/ に入ってるらしいのでそれを sudo cat /etc/sudoers.d/010_pi-nopasswd で確認してみましょう
すると pi ALL=(ALL) NOPASSWD: ALL ってのがあります この NOPASSWD ってのがパスワードを聞かれないための設定らしいです
この /etc/sudoers.d の設定ファイルも直接書き換えるのではなく専用コマンドの sudo visudo -f /etc/sudoers.d/010_pi-nopasswd を使うらしいです
まぁただそれだけの話なんですけどね モヤモヤしてた謎が解けたらイイネ!って感じで長々とお疲れさまでした! #[Raspberry Pi] #コマンドヘルプ
●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3
●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2
●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1
●ラズパイで Apache2 サーバを建ててゆるい設定をする
●モニタ無しでラズパイを VNC 接続できるとこまでセットアップ
Tweet ⌚ 2021年10月18日(月) 15:33:15 情報 <3977文字>
ラズパイの Apache で CPU 情報を取得する vcgencmd が CGI で動かない問題を解決する
Raspberry Pi 4 (ラズパイ) に CPU のクロック周波数や温度やらを取得する vcgencmd なるコマンドが用意されています
CPU などなどのクロック周波数を表示
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do echo -e "$src:\t$(vcgencmd measure_clock $src)" ; done
CPU の温度を表示
vcgencmd measure_temp
利用可能・不可能なコーデックの表示
for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; done
実行例
その他にもいろいろあるんで…詳しくは 解説ページをご覧ください って感じの vcgencmd コマンドなんですが Apache 上の CGI として実行させようとすると失敗するんでその辺をどうにかしてみます
まぁ結論から云ってしまうと…グループ video に Apache が実行するユーザである www-data が入っていないから動かないって事らしいです
cat /etc/group | grep video
video:x:44:pi
ちなみに Apache が実行するユーザは /etc/apache2/envvars で指定しているようです
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
試しにコマンドラインでユーザを www-data に切り替えて確認してみましょう
sudo su -s /bin/bash www-data
vcgencmd measure_temp
VCHI initialization failed
やはり使えないみたいですね…
それじゃグループ video にユーザ www-data を追加していきましょう まぁコマンド一発なんですが
sudo usermod -aG video www-data
これで追加できます 確認すると…
cat /etc/group | grep video
video:x:44:pi,www-data
グループ video にユーザ www-data が追加されました
それでは再びユーザを www-data に切り替えて確認してみましょう
sudo su -s /bin/bash www-data
vcgencmd measure_temp
temp=28.2'C
ちゃんと使えるようになりました
:
しかし Apache 上の CGI として vcgencmd コマンドを実行しても「VCHI initialization failed」のエラーが出続けます なんで??
いろいろと試していて…まぁはっきりとした理由は不明なんですが Apache を再起動させたらこの問題が解決しました
sudo systemctl restart apache2
これで Apache 上の CGI として vcgencmd コマンドが使えるようになりました 何か別の所に問題があるかもだけど…我が家の環境ではこの手法で解決できました
そんな操作の過程のスクリーンショットをぺたり
改竄の余地のないよう作業の過程を全て収録してあります※参考資料 グループからユーザを削除するには…
トラブルの解決中っていうか…いろいろやってて勢い余って必要のないユーザをグループに追加しちゃった!(>_<)qって時なんかにグループからユーザを削除する場合には以下のようにします
例えばグループ video に追加されたユーザ www-data を削除する場合は
sudo gpasswd -d www-data video
こんな感じに操作します 先ほどの usermod の場合とユーザ名とグループ名の指定が逆になってるので注意が必要です なんなら gpasswd -a でグループにユーザを追加することができるらしいんですが…どっちを使うといいんだろうね
:
さてさてそんな vcgencmd を使ってこんな感じで動かしています
その都度都度で PNG 画像を生成しています
Web サーバの処理やら画像の生成などで一時的にクロック高めな感じですがアイドル時は 600MHz くらいになってるようです
そんなこんなで何かの都合でラズパイを再セットアップした際に悩まないようなメモでした #[Raspberry Pi] #Apache #コマンドヘルプ #CGI