Rasp Pi ZERO で動くシステムの OS を Raspbian から Alpine Linux に差し替えた
なぜ?
shutdown 操作なしでの電源断で SD カードの内容が壊れるのを防ぐため
どんなシステム?
機能1 USB から入力されるデータの一部をネット経由でサーバーに上げる
機能2 USB から入力されるデータの一部を接続してある LCD に表示する
USB から入力されるデータ - C94-M8P が送出する RTCM3
データをネット経由でサーバーに上げるプログラム - str2str
データを LCD に表示するプログラム - python で書いた自家製プログラム
どうやった?
・Alpine Linux 3.8.1 - RASPBERRY PI - armhf をダウンロードして、fat32 でフォーマットした sd カードに解凍したものをコピー
・上記 sd カードを RaspPi Zero にセットしてこちらとこちらを参考に OS をセットアップ
・Raspbian でコンパイルした str2str は Alpine Linux では動かなかった。Rasp Pi Zero でコンパイルするために gcc をインストールし、rtklib のソースをインストールしようとしたところで、メモリが足りなくなる。
・Rasp Pi 3B+ を買ってきて 3B+ 向けの sd カードを作成、コンパイルを再挑戦(Zero は RAM 512M だが、3B+ は RAM 1G)。コンパイル成功。
・Rasp Pi 3B+ でコンパイルした str2str を Rasp Pi Zero コピーして動作確認
・Rasp Pi Zero に python2 をインストールして LCD 制御プログラムの動作確認
- pip で sysv_ipc, pymap3d をインストールする必要があったのだが、そのために apk で gcc, python2-dev, musl-dev をインストールする必要があった。gcc, python2-dev, musl-dev をインストールして pip を実行、pip 終了後に gcc, python2-dev, musl-dev をアンインストールした。
・pip でインストールした内容を 'lbu ci -d' の対象とするために 'lbu add /usr/lib/python2.7/site-packages/*' を実行
・/etc/init.d/shoho-getmsg, /etc/init.d/shoho-str2str を作って str2str 、lcd 制御プログラムをサービス化。
・'lbu add /etc/init.d/shoho-getmsg', 'lbu add /etc/init.d/shoho-str2str', 'lbu ci -d' を実行して、必要なファイルを永続化。
ここまででわかったこと
・RAM の半分を RAM-DISK として使い、通常動作中は sd カードに書き込みをしない
・RAM-DISK の内容を sd カードに保存するコマンドは 'lbu ci -d'
・RAM-DISK から sd カードに保存する領域の指定は 'ldu add /xxx/xxx'
- /xxx/xxx/* としないと、サブディレクトリ一式を指定したことにならない
・パッケージ管理は apk (apt でも yum でもない)
・サービス管理は OpenRC (SysVinit でも Systemd でもない)
-普通のプログラムはそのままではサービスにならない。バックグラウンドに回すスクリプトを書く必要がある(Systemd の場合は不要だった)
・サイズが小さい(上記システムが動く sd のファイルサイズが合計で 145MB)
・ファイルフォーマットが FAT32 (Windows で全領域にアクセスできる)
・バックアップ・リストアが楽(FAT32 でファイルサイズが小さいので、Windows で簡単にバックアップできる。リストアは Windows で FAT32 でフォーマットした sd カードにバックアップしたファイルをコピーすれば OK)
2018年12月29日土曜日
2018年12月25日火曜日
Rasp Pi Zero WH:Alipine Linux RPi.GPIO のインストール
pip を入れてから
>apk add gcc
とやってから再挑戦。 "Python.h がない!!" というエラーが出たので
> apk add python2-dev
とやってから再挑戦。"limits.h がない!!"というエラーが出たので
>apk add musl-dev
とやってから再挑戦。
やっと Successfully !
>pip install rpi.gpio
とやったら、コンパイルができない >< 系のエラーが出たので>apk add gcc
とやってから再挑戦。 "Python.h がない!!" というエラーが出たので
> apk add python2-dev
とやってから再挑戦。"limits.h がない!!"というエラーが出たので
>apk add musl-dev
とやってから再挑戦。
やっと Successfully !
Rasp Pi Zero WH:Alipine Linux pip のインストール
ネットで探してもインストール方法が見つからなかったので頭をひねった。
とやったらエラーが出てきて、最後に
と表示されたので
を実行して完了
> apk search | grep pipでみつかったので
py2-pip-10.0.1-r0
py-django-pipeline-1.3.25-r0
uwsgi-logpipe-2.0.17-r1
rp-alpine-4-1:/$ apk add py2-pip
> apk add py2-pip
とやったらエラーが出てきて、最後に
>You are using pip version 10.0.1, however version 18.1 is available.
>You should consider upgrading via the 'pip install --upgrade pip' command.
と表示されたので
>pip install --upgrade pip
を実行して完了
2018年12月18日火曜日
Rasp Pi Zero WH:Alipine Linux インストール
Raspberry Pi Zero を組み込み用に使おうとうしたときに、問題となるのが電源断時の SD カードの内容の保護。
Qiita で RaspberryPi2 の SD カードを aufs と fsprotect で保護する という記事を見つけたが、クロスビルドの環境構築で挫折 ><。他に何か中と調べたら RaspberryPiで「alpinelinux」 という記事を発見。いろいろと特徴が書かれていたのだが、
>よほどのことがないと起動パーティションは壊れない(書き換えようとするプロセスが居ない)
>機器の電源断やCPUの誤動作程度ではほぼほぼ起動パーティションの破壊はおこりません
の二点に惹かれて試してみることに。
↑のサイトの内容だけではうまくいかなかったので Raspberry Pi3 ZERO(W) Alpine Linux(3.8.1)インストール と合わせて何とかうまくいった。
実際に行ったのは、結局、
Qiita で RaspberryPi2 の SD カードを aufs と fsprotect で保護する という記事を見つけたが、クロスビルドの環境構築で挫折 ><。他に何か中と調べたら RaspberryPiで「alpinelinux」 という記事を発見。いろいろと特徴が書かれていたのだが、
>よほどのことがないと起動パーティションは壊れない(書き換えようとするプロセスが居ない)
>機器の電源断やCPUの誤動作程度ではほぼほぼ起動パーティションの破壊はおこりません
の二点に惹かれて試してみることに。
↑のサイトの内容だけではうまくいかなかったので Raspberry Pi3 ZERO(W) Alpine Linux(3.8.1)インストール と合わせて何とかうまくいった。
実際に行ったのは、結局、
2018年11月25日日曜日
Web:javascript が勝手に動くとき
サイトで DataTables 使って表を作り、行をクリックして選択、ボタンを押してその行に対する処理を行う処理を実装していた。FireFox の開発ツールを使ってステップ実行をしながらデバッグしていたのだが、ボタンの onClick で飛んできた直後にブレークポイントを入れたのだが、止まったと同時にすべての行が選択されてしまう現象が起きた。
最初はコードがおかしいのかと思ったのだが、どうも開発ツールを使っていないと現象が起きないっぽい。よくよく調べると[監視式]にすべての行が選択される式が書かれていた ><
datatable.rows().select() <- こんな感じ
使い方がよくわからなくていろいろ試していたのだが、こんなことが起きるとは...
最初はコードがおかしいのかと思ったのだが、どうも開発ツールを使っていないと現象が起きないっぽい。よくよく調べると[監視式]にすべての行が選択される式が書かれていた ><
datatable.rows().select() <- こんな感じ
使い方がよくわからなくていろいろ試していたのだが、こんなことが起きるとは...
2018年11月12日月曜日
Web:JS:一つしかないラジオボタンの状態を拾う方法
ラジオボタンが複数ある場合(フツーの状態)
しかし、ラジオボタンが一つしかないとき、この方法は使えない。クリックされていない状態でも value が返ってくる(複数あって一つも選択されていないときは value が "" となる)。
ラジオボタンの数が可変で一つのこともある場合は、一つの場合だけ処理を分け、value ではなく、checked (選択されていると true) で拾うのが吉。
上記ソースだと、ラジオボタンが一個の場合は
<form id="target">
<input name="hoge" type="radio" value="a"> A
<input name="hoge" type="radio" value="b"> B
<input name="hoge" type="radio" value="c"> C
</form>
// form要素を取得
var element = document.getElementById( "target" ) ;
// form要素内のラジオボタングループ(name="hoge")を取得
var radioNodeList = element.hoge ;
// 選択状態の値(value)を取得 (Bが選択状態なら"b"が返る)
var a = radioNodeList.value ;
if ( a === "" ) {
// 未選択状態
} else {
// aには選択状態の値が代入されている
console.log( a ) ;
}
(こちらのサイトのコードをお借りした)しかし、ラジオボタンが一つしかないとき、この方法は使えない。クリックされていない状態でも value が返ってくる(複数あって一つも選択されていないときは value が "" となる)。
ラジオボタンの数が可変で一つのこともある場合は、一つの場合だけ処理を分け、value ではなく、checked (選択されていると true) で拾うのが吉。
上記ソースだと、ラジオボタンが一個の場合は
// 選択状態の値(true)を取得
// value は最初から input 要素の value 属性が設定されている
var a = radioNodeList.checked ;
if ( a === false ) {
// 未選択状態
} else {
// 選択状態
}
2018年11月3日土曜日
Linux:Samba:Ubuntu18.04:とりあえず動く smb.conf 設定
何度やっても samba は嵌る ><
smb.conf を壊してどうにもならなくなった時
-> apt remvoe しても返ってこない。/usr/share/samba/smb.conf にオリジナルがある。
とりあえず以下の設定で共有ホルダーが使えるようになる
->[global] に以下を追加
元ネタはこちらとこちら
共有じゃないホルダーへのアクセスは、いまだできず ><
smb.conf を壊してどうにもならなくなった時
-> apt remvoe しても返ってこない。/usr/share/samba/smb.conf にオリジナルがある。
とりあえず以下の設定で共有ホルダーが使えるようになる
->[global] に以下を追加
unix charset = UTF-8120行目付近にある以下のコメントを外して有効に
dos charset = CP932
unix extensions = no
wide links = yes
map to guest = bad user
元ネタはこちらとこちら
共有じゃないホルダーへのアクセスは、いまだできず ><
2018年10月22日月曜日
2018年10月20日土曜日
Web:Edge で縦の border が途切れたとき
<span>でセルを並べて、border で罫線を引いた。Firefox /Chrome ではきれいに引けたのだが、Edge (17.17134)だと、半角/全角が横に混じった時、縦の罫線が途切れる。
諸々調べた結果、
すべてのセルに
諸々調べた結果、
すべてのセルに
- height: 1.5rem;
- vertical-align: middle;
2018年10月5日金曜日
Rasp Pi Zero WH:3.3V は弱い?
Rasp Pi Zero WH に秋月の 20x4 3.3V LCD をつなげたのだが、1時間ぐらい使っていると WiFi 経由で ssh でログインしているターミナルの反応が鈍くなり、'ネットが切断された'とダイアログが出て落ちてしまった。
そんなことが数回続いたので、いろいろ調べてみた。LCD の表示プログラムがメモリーリークを起こしているのかと思ったが、free で見た限りそんなことはなかった。CPU に触ったが、熱暴走というほど熱くない。なにより、LCD を外してプログラムを動かすと現象がでない。(LCD へのアクセスは busy を見ないロジックなのでプログラムの動作は LCD があってもなくても同じ)
そんなことが数回続いたので、いろいろ調べてみた。LCD の表示プログラムがメモリーリークを起こしているのかと思ったが、free で見た限りそんなことはなかった。CPU に触ったが、熱暴走というほど熱くない。なにより、LCD を外してプログラムを動かすと現象がでない。(LCD へのアクセスは busy を見ないロジックなのでプログラムの動作は LCD があってもなくても同じ)
Linux:systemd で python スクリプトを起動できないとき
Raspberry Pi zero WH で 、電源オン時に python スクリプトを systemd で起動させようとしたら苦労したのでメモ。
現象:
python スクリプトを systemd から起動しようとしたらうまくいかない。
原因:
python のモジュールをインストールしたとき、インストールしたユーザーでしか実行できない設定だった。
また、自作モジュールのディレクトリ配置にも問題があった
解決策:
pip でインストールしたモジュール:*.service の [Service]に、'User=pi' を追加
自作モジュール:[自作モジュール].py を WorkingDirectory にコピー
経過:
起動できないスクリプトからコードを減らしていき、import がなければエラーが起きないことを確認。ネットを検索すると、systemd は root で実行するが、モジュールインストール時にインストールユーザーしか使えない設定のためエラーになったらしい。
*.service ファイルの[Service]に 'User=pi' を追加して pip でインストールしたモジュールについては解決。
自作モジュールの import のエラーは解決せずに残った。起動させるスクリプトに一つ下のディレクトリに配置してあったのだが、同じディレクトリにリンクを張って解決(コマンドラインからは問題なく動いていたのだが...)。
その他:
日本語の情報が見つけられなかった...
現象:
python スクリプトを systemd から起動しようとしたらうまくいかない。
原因:
python のモジュールをインストールしたとき、インストールしたユーザーでしか実行できない設定だった。
また、自作モジュールのディレクトリ配置にも問題があった
解決策:
pip でインストールしたモジュール:*.service の [Service]に、'User=pi' を追加
自作モジュール:[自作モジュール].py を WorkingDirectory にコピー
経過:
起動できないスクリプトからコードを減らしていき、import がなければエラーが起きないことを確認。ネットを検索すると、systemd は root で実行するが、モジュールインストール時にインストールユーザーしか使えない設定のためエラーになったらしい。
*.service ファイルの[Service]に 'User=pi' を追加して pip でインストールしたモジュールについては解決。
自作モジュールの import のエラーは解決せずに残った。起動させるスクリプトに一つ下のディレクトリに配置してあったのだが、同じディレクトリにリンクを張って解決(コマンドラインからは問題なく動いていたのだが...)。
その他:
日本語の情報が見つけられなかった...
2018年10月4日木曜日
Rasp Pi Zero WH:swap を off する
2018年9月27日木曜日
さくらのクラウド:Apache と PHP のインストール
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install php7.2
いろいろやったが Ubuntu Server 18.04 LTS 64bit は、この3行入力だけでインストール&細かい設定が終わる模様(実行順番は大事)
html を置くディレクトリは /var/www/html
さくらのクラウド:最初のログイン ID は ubuntu
さくらのクラウドにサーバーを立てて、最初のログインで嵌る。
ubuntu を立てたのだが、ID:root passwd:インスタンス作成時の「管理ユーザーのパスワード」でログインできず。
調べたところ最初のユーザーや 'ubuntu' だった...
ubuntu を立てたのだが、ID:root passwd:インスタンス作成時の「管理ユーザーのパスワード」でログインできず。
調べたところ最初のユーザーや 'ubuntu' だった...
2018年9月25日火曜日
Rasp Pi Zero WH:OS の swap を無くす
Raspberry Pi ZERO の SD カードを長持ちさせる方法を調査中。まずは swap をやめる。default では RAM が 512M なのに 100M というなんとも中途半端な swap 領域を確保している。これにどういう意味があるのか?
----
まずは
元ネタはこちら
----
まずは
pi@raspberrypi:~ $ free -hとして swap 領域があることを確認。そのあと、
total used free shared buff/cache available
Mem: 434M 27M 336M 3.2M 69M 356M
Swap: 99M 0B 99M
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile
として swap を止める。そのあと、
$ sudo shutdown -r now
で reboot して、再起動したら
pi@raspberrypi:~ $ free
total used free shared buff/cache available
Mem: 444452 28836 344236 3288 71380 364376
Swap: 0 0 0
となれば OK元ネタはこちら
2018年9月14日金曜日
Rasp Pi Zero WH:ftp をインストール
> sudo apt-get install vsftpd
一発で OK。
細かい設定が必要というサイトもあったが、自分の環境では Windows から ffftp で、これだけでつながった。
小さなテキストファイルはやり取りできたがでっかい zip ファイルをアップロードできなかった。
こちらのサイトの設定が必要
2018年9月12日水曜日
Rasp Pi Zero WH:PIP をインストール
OS のバージョンは
Linux raspberrypi 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l GNU/Linux以下の2行で OK
元ネタはこちらsudo apt-get install python-devsudo apt-get install python-pip
2018年9月5日水曜日
メモ:samba が WiFi でつながらなかったら WINS
Raspberry Pi Zero WH で samba を立ち上げた。USB 経由の TCP/IP 接続では問題なくネットワークドライブとして使えたのだが、WiFi 接続にしたらつながらなくなった。エクスプローラからデバイスは見えるのだが、つなぎにいくとエラーになる。
調べていくと WINS の設定で使えるようになった。詳細はこちら参照。
調べていくと WINS の設定で使えるようになった。詳細はこちら参照。
2018年9月2日日曜日
メモ:2018/04 に購入した C94-M8P のバージョン
u-blox 8 / u-blox M8 Receiver Description によると Standard Precision GNSS products ということらしい
----
Software Version:EXT CORE 3.01 (db0c89)
Hardware Version:00080000
Extension(s):
ROM BASE 3.01(107888)
FWVER=HPG 1.40REF
PROTVER=20.30
MOD=NEO-M8P-2
FIS=0xEF4015(100111)
GPS;GLO;BDS
QZSS
----
Software Version:EXT CORE 3.01 (db0c89)
Hardware Version:00080000
Extension(s):
ROM BASE 3.01(107888)
FWVER=HPG 1.40REF
PROTVER=20.30
MOD=NEO-M8P-2
FIS=0xEF4015(100111)
GPS;GLO;BDS
QZSS
2018年8月31日金曜日
Rasp Pi Zero WH:samba を立てる
RTKLIB 周りのソースに手を入れる必要が出てきた。たくさんのソースを vi でメンテできるほどのスキルが無いので、samba を立てて Windows のエディターを使うことにした。
まずは samba のインストール
続いて /etc/samba/smb.conf の最後に以下を追加
元ネタはこちら
まずは samba のインストール
$ sudo apt-get update
$ sudo apt-get upgrade <- これはおまけ
$ sudo apt-get install samba
続いて /etc/samba/smb.conf の最後に以下を追加
[pi]最後に samba を起動
comment = Raspberry Pi
path = /home/pi
guest ok = yes
read only = no
public = yes
browsable = yes
force user = pi
$ sudo service smbd restart $ sudo service nmbd restart
元ネタはこちら
Rasp Pi Zero WH:WiFi に固定 IP を割り当て
WiFi につながったのだが、IP アドレスがルータから DHCP で振られていると、ssh でログインするたびに IP アドレスを確認しなくてはならないので固定 IP を割り当てることに。
/etc/dhcpcd.conf の最後に以下を追加
元ネタはこちら
/etc/dhcpcd.conf の最後に以下を追加
interface wlan0その後以下を実行して有効に
static ip_address=192.168.10.101/24
static routers=192.168.10.254
static domain_name_servers=192.168.10.254
sudo
service dhcpcd reload
元ネタはこちら
2018年8月23日木曜日
AliExpress に注文したら、一週間で届いた
2018年8月22日水曜日
Rasp Pi Zero WH:WiFi につなぐ
Raspberry Pi Zero WH を WiFi 経由でネットワークにつなぐ方法。
いろいろやってるうちに気が付いたらつながっていたので、raspi-config は実行しなくてよいかも。
元ネタはこちら。
この後、$ vim pass.txt (wifiのパスワードを記載) $ sudo sh -c 'wpa_passphrase "wifiのアクセスポイント名" < pass.txt >> /etc/wpa_supplicant/wpa_supplicant.conf' $ sudo wpa_cli reconfigure
$ sudo raspi-config
で設定画面を開いて、[2 Network Options] を選択、その後[N2 Wi-fi]を選択。そこで国を選ぶ。その先には進まず、終了。いろいろやってるうちに気が付いたらつながっていたので、raspi-config は実行しなくてよいかも。
元ネタはこちら。
Rasp Pi Zero WH:bluetooth 経由でスマホを使ってテザリング
Raspberry Pi Zero WH を bluetooth 経由でスマホで接続、テザリングしてインターネットにつないだ。
やったこと:
1.OS のアップデート
3.bluetooth の PAN プロファイルをインストール
----
結果的にはこれで動いたが、最初、スマホがきちんとネットにつながっていなかったために、一苦労した。
やったこと:
1.OS のアップデート
この時点のバージョンは$ sudo apt-get update
$ sudo apt-get upgrade
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.62+ #1134 Tue Aug 14 16:58:07 BST 2018 armv6l GNU/Linux
2.スマホとペアリング
※元ネタはこちら 、他のサイトでは 'sudo' が無くて動かなかった$ sudo bluetoothctl [bluetooth]# scan on ... Device FF:FF:XX:XX:XX:XX (スマホの型番) ... [bluetooth]# pair FF:FF:XX:XX:XX:XX [bluetooth]# exit
3.bluetooth の PAN プロファイルをインストール
※元ネタはこちら$ wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan $ chmod 755 bt-pan $ sudo ./bt-pan client XX:XX:XX:XX:XX:XX ※dbusがないとエラーが出た場合は下記を別途インストール $ sudo apt-get install python-dbus
----
結果的にはこれで動いたが、最初、スマホがきちんとネットにつながっていなかったために、一苦労した。
2018年8月20日月曜日
Rasp Pi Zero のセットアップで嵌った
Raspberry Pi Zero WH を購入。まずは、Windows PC と USB ケーブルでつないで ssh 接続しようとしたら3時間以上かかってしまった。
原因はどうやら、Windows PC に2015年にインストールした Bonjour らしい。
----
基本的にはこちらのサイトの手順+こちらのサイトを見てポートの穴あけ。
やったのだが、さっぱり動かない。RaspPi Zero をイーサネットポートとして認識しているのだが ssh でつなごうとすると「gethostbyname() で raspberrypi.local がみつからない」と出てくる。固定 IP を割り振ったら、ping は返ってくるのだが ssh ではタイムアウト。
直近の OSイメージを使っていたのだが、念のために記事にあるバージョンのイメージを使ってやってもだめ。
Bonjour を再インストールしようと Windows 設定画面の[アプリと機能]を開くと [Bonjour] と [Bonjour 印刷サービス] と Bonjour が二つある。そして Bonjour の方の日付が 2015年。そういえば昔、入れた覚えが...。
とりあえず両方アンインストールして、公式サイトから Bonjour をインストールしなおし。これで無事動いた。
ちなみに、今確認したところ [Bonjour] と [Bonjour 印刷サービス]は両方あった。[Bonjour]の日付はもちろん今日。
最新の OS イメージを使っても動くことが確認できた。
----
最近、こういう予想外のところで嵌ることが少なかったのだが、まぁ、こういことは当然あるさ(笑
原因はどうやら、Windows PC に2015年にインストールした Bonjour らしい。
----
基本的にはこちらのサイトの手順+こちらのサイトを見てポートの穴あけ。
やったのだが、さっぱり動かない。RaspPi Zero をイーサネットポートとして認識しているのだが ssh でつなごうとすると「gethostbyname() で raspberrypi.local がみつからない」と出てくる。固定 IP を割り振ったら、ping は返ってくるのだが ssh ではタイムアウト。
直近の OSイメージを使っていたのだが、念のために記事にあるバージョンのイメージを使ってやってもだめ。
Bonjour を再インストールしようと Windows 設定画面の[アプリと機能]を開くと [Bonjour] と [Bonjour 印刷サービス] と Bonjour が二つある。そして Bonjour の方の日付が 2015年。そういえば昔、入れた覚えが...。
とりあえず両方アンインストールして、公式サイトから Bonjour をインストールしなおし。これで無事動いた。
ちなみに、今確認したところ [Bonjour] と [Bonjour 印刷サービス]は両方あった。[Bonjour]の日付はもちろん今日。
最新の OS イメージを使っても動くことが確認できた。
----
最近、こういう予想外のところで嵌ることが少なかったのだが、まぁ、こういことは当然あるさ(笑
2018年8月17日金曜日
CSG Shop に注文したら
GPS 系のアイテムの多い CSG Shop に注文してみた。
07/23 の夕方に Web から注文して届いたのは 8/14、ちょうど3週間。
発送確認のメールは 7/30 00:18(JST)。
'Carrier' は 'Signed EU post with tracking number 100-500gr' はだったけど、tracking number などの連絡は一切なく。送料は $7.00。
07/23 の夕方に Web から注文して届いたのは 8/14、ちょうど3週間。
発送確認のメールは 7/30 00:18(JST)。
'Carrier' は 'Signed EU post with tracking number 100-500gr' はだったけど、tracking number などの連絡は一切なく。送料は $7.00。
2018年8月15日水曜日
2018年8月14日火曜日
u-blox の M8x +u-Center で BeiDou, QZSS を表示させる方法
C94-M8P を u-Center に接続すると、default setting では BeiDou, QZSS が表示されない。これを表示されるようにする方法。
2018年8月10日金曜日
Linux:firewall に穴を開ける方法
さくらのクラウドで str2str を動かす際に必要。
確認環境:
さくらのクラウド上の CentOS Linux release 7.5.1804 (Core) 2018/08/09 作成
確認環境:
さくらのクラウド上の CentOS Linux release 7.5.1804 (Core) 2018/08/09 作成
元ネタはこちらの下の方firewall-cmd --permanent --add-port=21
/tcp
firewall-cmd --reload
2018年8月8日水曜日
RTK-GPS:u-blox 6 で raw データを出力させる方法2
u-blox 6 を u-Center から直接操作して raw データを出力できるようになったのが前回までのあらすじ。
今回は RTKLIB につないだ u-blox 6 に raw データを出力させ RTK を使うお話。
OpenStreetMap Wiki の情報に
スーパーの駐車場で u-blox 6 + RtkGps+ + 善意の基準局(5km 程離れている) で試したところ、Float解までは得られて、緯度経度ともに小数点以下5桁までは安定して表示された。5分ほどでは Fix 解は得られなかったが、このあたりが限界か、調整すれば何とかなるのかはこれからの課題。
今回は RTKLIB につないだ u-blox 6 に raw データを出力させ RTK を使うお話。
OpenStreetMap Wiki の情報に
!HEX b5 62 09 01 10 00 c8 16 00 00 00 00 00 00 97 69 21 00 00 00 02 10 2b 22
!HEX b5 62 09 01 10 00 0c 19 00 00 00 00 00 00 83 69 21 00 00 00 02 11 5f f0
のような書式があり、どこで使うのかといろいろ調た。u-Center の [Tools]->[GNSS Configuration]->[GNSS > File] で出力される設定ファイルの内容や、RTKLIB ver.2.4.2 Manual pp.10 の内容から、RTKNAVI の [Input Stream]-> [Cmd] で使える書式と判明。上記2行は「使えるようにする」設定で、データを USB から出力するにはさらに以下の2行が必要。(このあたりも参考にした)!UBX CFG-MSG 2 16 0 0 0 1 0 0結局下の図のように設定することで、無事 u-blox 6 のモジュールが RTKLIB で特別な操作なしに使えるようになり、同様の設定で RtkGps+ でも使えた。
!UBX CFG-MSG 2 17 0 0 0 1 0 0
スーパーの駐車場で u-blox 6 + RtkGps+ + 善意の基準局(5km 程離れている) で試したところ、Float解までは得られて、緯度経度ともに小数点以下5桁までは安定して表示された。5分ほどでは Fix 解は得られなかったが、このあたりが限界か、調整すれば何とかなるのかはこれからの課題。
2018年8月7日火曜日
RTK-GPS:RtkGps+ で u-blox M8P の RAW データを使う
RtkGps+ が C94-M8P の RAW データを認識しない件、RTKLIB のバージョンが古いことが原因とあたりを付けた。
RtkGps+ は github にコードが公開されているので、自分でなんとかしようとしたのだが、異様に手間がかかった。
まずは Android Studio でビルドできるようにと頑張った。なにせ compileSdkVersion 17, minSdkVersion 14, targetSdkVersion 17、おまけに NDK も使ってる。RTK と直接関係ない機能をあっちこっち潰し、ビルド環境を Windwos から Mac に変え、ビルドができるようになるまで一週間以上かかった。
ただ、そこからは古い RTKLIB と新しい RTKLIB のソースを見比べながら、割とあっさり C94-M8P の RAW データが使えるようになった。使えるようになったといっても、それっぽく表示がそれっぽくなっただけで、まだ RTK が FIX したわけではないのだが。
次は戸外で FIX することの確認だ。
p.s.
いまこのブログを書くために元の github を確認したら、ここ一週間で新しいコミットがいくつも入ってる。 近々新バージョンがリリースされるのだろうか?無駄なことしたかもしれない orz
まぁ、いろいろと Android の勉強にはなったし、当面の目標は達成されたし、いいことにしよう...
RtkGps+ は github にコードが公開されているので、自分でなんとかしようとしたのだが、異様に手間がかかった。
まずは Android Studio でビルドできるようにと頑張った。なにせ compileSdkVersion 17, minSdkVersion 14, targetSdkVersion 17、おまけに NDK も使ってる。RTK と直接関係ない機能をあっちこっち潰し、ビルド環境を Windwos から Mac に変え、ビルドができるようになるまで一週間以上かかった。
ただ、そこからは古い RTKLIB と新しい RTKLIB のソースを見比べながら、割とあっさり C94-M8P の RAW データが使えるようになった。使えるようになったといっても、それっぽく表示がそれっぽくなっただけで、まだ RTK が FIX したわけではないのだが。
次は戸外で FIX することの確認だ。
p.s.
いまこのブログを書くために元の github を確認したら、ここ一週間で新しいコミットがいくつも入ってる。 近々新バージョンがリリースされるのだろうか?無駄なことしたかもしれない orz
まぁ、いろいろと Android の勉強にはなったし、当面の目標は達成されたし、いいことにしよう...
2018年7月26日木曜日
RTK-GPS:u-blox 6 で raw データを出力させる方法
C94-M8P で基地局を作ろうと思って調べていたら、ひょんなことから発見。一筋縄ではいかなかったが、取り合えずやり方がわかったのでメモ。
条件は厳しい。
対象:
hardware:u-blox 6
farmware:Ver 7.03(45969)
使ったのはアンテナ一体型モジュールで、PC とは USB 接続
買ったのは 2016/01、Amazon から これ。現在は品切れだけど、型名で検索すると google 様が海外の別な店を勧めてくる。ただし、同じように使えるかは不明(2018/08/01 現在)
やり方:
・u-blox 6 を PC に接続(電源 ON)、u-center 起動、u-blox 6 と connect
・F9 を押して、Message View を開く
・Message View の左の window を一番下までスクロールして CUSTOM を開く
・右の Window に以下をコピペして Send をクリック
・右の Window に以下をコピペして Send をクリック
[パラメータはこちらから]
・Ctrl+F9 を押して、Configure View を開く
・左の Window で MSG を選択
・右の Window で[02-10 RXM-RAW],[02-11 RXM-SFRB]で出力を選択
(ここまで書いて翌日試したら動かなかった >< で、さらに調べて以下を発見)
・Configure View の左の Window で PRT を開く
・右の Window で下の設定をして send をクリック(出力速度が 9600bps だと raw データを流しきれず、コントローラーが勝手に間引いてしまうらしい。今回使ったのは USB 接続なので、UART1 を disable した。ちなみにこの設定だけは不揮発性メモリに反映される)
・このまま電源を切らずに RTKNAVI につなぎ変えると、無事、Rover として認識
----
残念ながら、この設定、u-blox 6 の不揮発性メモリには反映させられないみたいなので、電源投入時に毎回設定が必要 ><
ここを何とかすれば、使い道が広がりそう。
----
続きはこちら。RTKLIB/RTKGPS+ のローバーとして u-blox 6 を使えるようになった 。
条件は厳しい。
対象:
hardware:u-blox 6
farmware:Ver 7.03(45969)
使ったのはアンテナ一体型モジュールで、PC とは USB 接続
買ったのは 2016/01、Amazon から これ。現在は品切れだけど、型名で検索すると google 様が海外の別な店を勧めてくる。ただし、同じように使えるかは不明(2018/08/01 現在)
やり方:
・u-blox 6 を PC に接続(電源 ON)、u-center 起動、u-blox 6 と connect
・F9 を押して、Message View を開く
・Message View の左の window を一番下までスクロールして CUSTOM を開く
・右の Window に以下をコピペして Send をクリック
b5 62 09 01 10 00 c8 16 00 00 00 00 00 00 97 69 21 00 00 00 02 10 2b 22
・右の Window に以下をコピペして Send をクリック
b5 62 09 01 10 00 0c 19 00 00 00 00 00 00 83 69 21 00 00 00 02 11 5f f0
[パラメータはこちらから]
・Ctrl+F9 を押して、Configure View を開く
・左の Window で MSG を選択
・右の Window で[02-10 RXM-RAW],[02-11 RXM-SFRB]で出力を選択
(ここまで書いて翌日試したら動かなかった >< で、さらに調べて以下を発見)
・Configure View の左の Window で PRT を開く
・右の Window で下の設定をして send をクリック(出力速度が 9600bps だと raw データを流しきれず、コントローラーが勝手に間引いてしまうらしい。今回使ったのは USB 接続なので、UART1 を disable した。ちなみにこの設定だけは不揮発性メモリに反映される)
・このまま電源を切らずに RTKNAVI につなぎ変えると、無事、Rover として認識
----
残念ながら、この設定、u-blox 6 の不揮発性メモリには反映させられないみたいなので、電源投入時に毎回設定が必要 ><
ここを何とかすれば、使い道が広がりそう。
----
続きはこちら。RTKLIB/RTKGPS+ のローバーとして u-blox 6 を使えるようになった 。
2018年7月25日水曜日
RTK-GPS:rtklib と遊ぶ - その2
Windows 上の rtklib が C94-M8P との組み合わせで動いたので、今度は Android 上で rtklib+ と C94-M8P の組み合わせに挑戦。
Windows と同じような設定をしても、Rover も Base も SNR に信号がでてこない。緑の四角いのは、二つ、チカチカしてるので Rover/Base ともに、それっぽいデータが来ていることは間違いなさそう。
シリアルターミナルを立ち上げて C94-M8P からのデータを見ると NMEA っぽく見えるし、telnet で Base につないでも NMEA ぽっく見える。
(ちなみに base は 善意の基準局掲示板 にあるデータ形式 u-blox、接続方法 STRSVRの局)
最初、Intel CPU の Android タブレットを WiFi 経由で Base につないでいたので、Intel CPU の問題かと思い、Arm CPU の Android phone + WiFi でつないでもダメ、Android では無理なかと、Windows tablet + rtklib + WiFi で試してもダメ。Wndows tablet + rtklib の設定を、動いている Windows PC + rtklib の設定にしてもダメ。
ただ、Windows tablet + rtklib と Windows PC + rtklib の設定を比較しているときに、設定ダイアログの内容が微妙に違っていることに気が付いた。
動いている Windows PC 上の rtklib は 2.4.2 p13、動かない Windows tablet 上の rtklib は 2.4.2。Windows tablet の rtklib を 2.4.2 p13 に入れ替えたら動いた。
Android 上の RtkGps+ のバージョンは 1.0 alpha 23 。さて、ベースの rtklib バージョンは...
2018/08/01 追記:
RtkGps+ の README.md によれば RtkGps+ 1.0 alpha 23 の rtklib は "Version pre 2.4.2p9"。C94-M8P の出力が認識されないのはこのせいか?
Windows と同じような設定をしても、Rover も Base も SNR に信号がでてこない。緑の四角いのは、二つ、チカチカしてるので Rover/Base ともに、それっぽいデータが来ていることは間違いなさそう。
シリアルターミナルを立ち上げて C94-M8P からのデータを見ると NMEA っぽく見えるし、telnet で Base につないでも NMEA ぽっく見える。
(ちなみに base は 善意の基準局掲示板 にあるデータ形式 u-blox、接続方法 STRSVRの局)
最初、Intel CPU の Android タブレットを WiFi 経由で Base につないでいたので、Intel CPU の問題かと思い、Arm CPU の Android phone + WiFi でつないでもダメ、Android では無理なかと、Windows tablet + rtklib + WiFi で試してもダメ。Wndows tablet + rtklib の設定を、動いている Windows PC + rtklib の設定にしてもダメ。
ただ、Windows tablet + rtklib と Windows PC + rtklib の設定を比較しているときに、設定ダイアログの内容が微妙に違っていることに気が付いた。
動いている Windows PC 上の rtklib は 2.4.2 p13、動かない Windows tablet 上の rtklib は 2.4.2。Windows tablet の rtklib を 2.4.2 p13 に入れ替えたら動いた。
Android 上の RtkGps+ のバージョンは 1.0 alpha 23 。さて、ベースの rtklib バージョンは...
2018/08/01 追記:
RtkGps+ の README.md によれば RtkGps+ 1.0 alpha 23 の rtklib は "Version pre 2.4.2p9"。C94-M8P の出力が認識されないのはこのせいか?
2018年7月23日月曜日
RTK-GPS:rtklib と遊ぶ - その1
これから需要が伸びそうなのところを目指して、RTK-GPS を研究中。4月に u-blox の C94-M8P を入手したのだが、忙しくて手を付けられず。
7月になってようやく触り出す。好条件化で Rover が FIX した時の誤差が cm オーダーになる驚異的な精度を体感。
次は条件の悪いときの精度を調べたいのだが、外での実験にはいろいろと準備がいるし、天候とも相談だしということで腰が重くなる。
ということで、家で C94-M8P を Windows 上の rtklib につないでみる。動かすためのキモは、
・ドライバーを Windows 標準のシリアルドライバーに変更
・u-center に接続して ctrl + F9 でConfigure ダイアログを開き UBX-CFG(config)-MSG(Messages) で [02-15 RXM-RAWX] と [02-13 RXM-SFRBX] を USB から出力するように設定する
[02-15 RXM-RAWX] と [02-13 RXM-SFRBX]については、RTKLIB ver.2.2 Manual の 6 ページに
とあるのを見つけていたが、なんのことかわからず無視していた。 動かないのでいろいろ調べていたところ、こちらのページで
とあったので、「あ、あの設定か!」と気づき設定したら動いた。
ただし、C94-M8P では、「RXM-RAW」と「RXM-SFRB」は設定できなかったので「RXM-RAWX」と「RXM-SFRBX」を設定した。
ちなみに u-blox 6 のアンテナ一体型受信機では、上記パラメータは全く設定できなかったので、u-blox 6 は RTK-GPS のローバーになれないっぽい。
7月になってようやく触り出す。好条件化で Rover が FIX した時の誤差が cm オーダーになる驚異的な精度を体感。
次は条件の悪いときの精度を調べたいのだが、外での実験にはいろいろと準備がいるし、天候とも相談だしということで腰が重くなる。
ということで、家で C94-M8P を Windows 上の rtklib につないでみる。動かすためのキモは、
・ドライバーを Windows 標準のシリアルドライバーに変更
・u-center に接続して ctrl + F9 でConfigure ダイアログを開き UBX-CFG(config)-MSG(Messages) で [02-15 RXM-RAWX] と [02-13 RXM-SFRBX] を USB から出力するように設定する
[02-15 RXM-RAWX] と [02-13 RXM-SFRBX]については、RTKLIB ver.2.2 Manual の 6 ページに
- ublox Raw : RXMRAW, RXMSFRM
とあるのを見つけていたが、なんのことかわからず無視していた。 動かないのでいろいろ調べていたところ、こちらのページで
u-bloxの受信機をRTKNAVIに接続する場合,受信機出力としてUBXフォーマットのRXM-RAWとRXM-SFRBが必要になります.
とあったので、「あ、あの設定か!」と気づき設定したら動いた。
ただし、C94-M8P では、「RXM-RAW」と「RXM-SFRB」は設定できなかったので「RXM-RAWX」と「RXM-SFRBX」を設定した。
ちなみに u-blox 6 のアンテナ一体型受信機では、上記パラメータは全く設定できなかったので、u-blox 6 は RTK-GPS のローバーになれないっぽい。
2018年4月16日月曜日
Xamarin の C# の Android Framework でメニューを使うには?
Xamarin + Android Framework でアプリ開発中、Menu の追加にてこずった。
後からメニューを追加しようとして、ネットで探した
public override Boolean OnCreateOptionsMenu (IMenu menu)
後からメニューを追加しようとして、ネットで探した
public override Boolean OnCreateOptionsMenu (IMenu menu)
{
MenuInflater.Inflate(Resource.Menu.mymenu, menu);
return base.OnPrepareOptionsMenu(menu);
}
をコピペしたのだが
エラー CS0115 'xxxActivity.OnCreateOptionsMenu(IMenu)': オーバーライドする適切なメソッドが見つかりませんでした。
エラー CS0246 型または名前空間の名前 'IMenu' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。
とエラーが出る。
OnCreateOptionsMenu() は、Android Framework のメソッドそのままなのに、見つかりませんってどういうこと?と悩むこと10数分。名前空間の指定が足りないのは IMenu の方だった。
using Android.Views;
を追加して一件落着。
VS のコード補完は Android Studio より弱いのか。
登録:
投稿 (Atom)