忍者ブログ

NOROMA CLUB -日記-

2022年11月05日  RaspberryPi Picoでオシロスコープ

RaspberryPi Picoとスマホでオシロスコープが使えるらしく、
前から気になっていたのですが、時間があったので試してみました。

基本的には、Scoppy Oscilloscope のサイトの説明通り進めるだけです(英語ですが)。

スマホにアプリをインストールして、
RaspberryPi Picoにファームウェアをインストールして、
ピンリストを見ながらブレッドボードで適当に結線するだけです。

とりあえず動かしてみました。


UART(115.2Kbps)ぐらいであれば対応できているようです。
同じ115.2Kbpsでも、ロジアナモードだと結構綺麗に出ています。
ただ、波形を表示できるだけで、値をデコードする機能とかはなさそうです。


オシロは最大2ch、ロジアナは最大8ch対応しているようですが、
無料版だとどちらも1chしか使えないらしく、それ以上は\280の課金が必要なようです。

スペックと使い勝手を考えると、これを本格的に使う気にはなれなかったのと、
どちらかといえばAmazonで3千円ぐらいで売ってる簡易的なオシロの方が興味があるというか。
そもそも、USB接続のオシロもロジアナも持っているのですが、数年間使ってない気がするし。。。

拍手[0回]

PR

2021年08月15日  RaspberryPi PicoでOpenOCD

6月に買ってみたRaspberryPi Picoのその後です。
一緒に買っておいたインターフェース8月号を見ながら
普通にプログラミングして動かすところはできました。
まあ、全然使いこなせてはいませんが・・・(笑)

てっきりPythonでゆるーく動かすのかと思っていたのですが、
ガッツリC言語(+さらに理解困難なPIO命令のアセンブラ)だったのは、ちょっと想定外。

あとはGDBとOpenOCDもちょっと使ってみたくて、先日日本橋に行ったときもう1台買い足してみました。

なんか配線がごちゃごちゃしていますが、
手前(USBが繋がっている方)がデバッガ化したRaspberryPi Picoで、
奥が実際にプログラムを動かす方のRaspberryPi Picoです。
デバッガ側のGPIO端子と、メイン側のSWD端子を接続しています。

Windows10 + WSL2(Windows Subsystem for Linux 2)環境で試しましたが、
インターフェースの記事通りにやっても全然動かず、いろいろハマりました・・・。
とりあえず動作確認までできたので、いくつかハマったポイントを列挙です。
(ここに偶然辿り着いて、同じことにハマっている方がいれば参考用)


○OpenOCDの起動に失敗
WSL2のターミナルでOpenOCD(openocd.exe)を実行しても、
数秒後にプログラムが勝手に終了してプロンプトに戻ってしまいました。
この状態でGDBから接続しても、接続エラーで失敗します。
プロンプトに戻っても、バックグラウンドで動いているのかと思ったのですが、
どうやらプロンプトに戻らず動き続けるのが正しい挙動だったようです。

openocd.exe という名前が示すとおり、これはLinux用のプログラムではなく、
Windows用のプログラムということのようです。
試しにWindowsのコマンドプロンプト(DOS窓)から、openocd.exeを実行すると、無事回避できました。

ただ、これはセキュリティソフト(Avast Antivirus 無料版を使っています)が
誤検出して余計なことをしている気もしてきました・・・。
別件でAvastの設定をいろいろ触っていたら、いつの間にかopenocd.exeも起動するようになりました・・・。
(どこの設定を変えたのか、いまいち把握できていないのですが)


○TeratermとWSL2の相性問題
WSL2純正のターミナルが使いにくいので、TeratermからWSL2環境に接続して作業していたのですが、
Windowsコマンドを呼び出す場合はWSL2純正ターミナルでないとダメな場合があるようです。
これはOpenOCDとか関係なく、単純にWSL2のPATH設定の違いだけのようですが。

TeratermだとWindows側のPATH設定は引き継いでくれないので、
"explorer.exe" とか、 "code"(=VS Code) とか、パス指定なしだとコマンドが見つからず、
しかたないので、この時だけWSL2純正のターミナルで回避しました。


○VS CodeのGUIデバッグが動かず
VS Codeを起動して、F5キーで実行してみても、謎のコンパイルエラーが出て動きませんでした。
どうやら、.vscode/ の下にjsonファイルを3つ準備しないといけないようです。
各ファイルの中身は、下記の内容を貼り付けると動くようになりました。
(中身は理解していませんが、ネットで探してきた情報です)
ちなみに、VS Codeを実行すると同じ名前のファイルが勝手に生成されているかもしれませんが、
生成されたものでは動かなかったので、全部コピーしなおす方がよさそうです。

.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Pico Debug",
            "type": "cortex-debug",
            "request": "launch",
            "servertype": "external",
            "cwd": "${workspaceRoot}",
            "runToMain": true,
            "executable": "${command:cmake.launchTargetPath}",
            "device": "RP2040",
            "gdbPath": "gdb-multiarch",
            "gdbTarget": "${env:PICO_OPENOCD_ADDRESS}:3333",
            "svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/rp2040.svd",
            "runToEntryPoint": "main",
        }
    ]
}

.vscode/settings.json
{
    // These settings tweaks to the cmake plugin will ensure
    // that you debug using cortex-debug instead of trying to launch
    // a Pico binary on the host
    "cmake.statusbar.advanced": {
        "debug": {
            "visibility": "hidden"
        },
        "launch": {
            "visibility": "hidden"
        },
        "build": {
            "visibility": "hidden"
        },
        "buildTarget": {
            "visibility": "hidden"
        }
    },
    "cmake.buildBeforeRun": true,
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}


.vscode/tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "make",
            "type": "shell",
            "command": "make -j8",
            "options": {
                "cwd": "${workspaceFolder}/build/${relativeFileDirname}"
            },
            "presentation": {
                "revealProblems": "onProblem"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        },
        {
            "label": "make (verbose)",
            "type": "shell",
            "command": "make VERBOSE=1",
            "options": {
                "cwd": "${workspaceFolder}/build/${relativeFileDirname}"
            },
            "presentation": {
                "revealProblems": "onProblem"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        },
        {
            "label": "clean",
            "type": "shell",
            "command": "make clean",
            "options": {
                "cwd": "${workspaceFolder}/build/${relativeFileDirname}"
            },
            "problemMatcher": [],
            "group": "build"
        },
        {
            "label": "install",
            "type": "shell",
            "command": "pico-install",
            "args": [
                "*.uf2"
            ],
            "options": {
                "cwd": "${workspaceFolder}/build/${relativeFileDirname}"
            },
            "problemMatcher": [],
            "group": "build"
        },
        {
            "label": "distclean",
            "type": "shell",
            "command": "rm -rf ${workspaceFolder}/build",
            "problemMatcher": [],
            "group": "build"
        },
        {
            "label": "cmake",
            "type": "shell",
            "command": "mkdir build; (cd build; cmake .. -DCMAKE_BUILD_TYPE=${input:buildType} -DPICO_DEFAULT_BINARY_TYPE=${input:binaryType})",
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [],
            "group": "build"
        },
        {
            "type": "cppbuild",
            "label": "C/C++: arm-none-eabi-gcc アクティブなファイルのビルド",
            "command": "/usr/bin/arm-none-eabi-gcc",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "デバッガーによって生成されたタスク。"
        }
    ],
    "inputs": [
        {
            "type": "pickString",
            "id": "buildType",
            "description": "Build Type",
            "options": [
                "Release",
                "Debug"
            ],
            "default": "Debug"
        },
        {
            "type": "pickString",
            "id": "binaryType",
            "description": "Binary Type",
            "options": [
                "default",
                "no_flash",
                "copy_to_ram",
                "blocked_ram"
            ],
            "default": "default"
        }
    ]
}

拍手[1回]


2020年05月29日  RaspberryPiで温度測定

ちょっと思うところがあって、
RaspberryPiで定期的に温度測定してログ取得する環境を作ってみました。

使うのは、秋月のADT7410の温度センサモジュールです。
数年前に買って遊んだっきり、使っていなかったのを流用です。

RaspberryPi3 ModelBのピン配置は、
1:3.3V
3:I2C SDA
5:I2C SCL
7:GPIO4(今回未使用)
9:GND
と横並びなので、5ピンまとめてピンソケットで接続するようにしています。


ちなみにケーブルは、4線で1mぐらいの用途だと、
USBケーブルを切って使うのが便利です。いっぱい余ってるし(笑)

I2Cの接続ができたら、
$ i2cget -y 1 0x48 0x00 w
0xc80e
で温度情報が取得できるようです。

実際には、バイトを入れ替えて(0xc80e→0x0ec8)、
16進数から10進数に変換して(0xc80e→3784)、
128で割った数値(3784÷128=29.5625)が、実際の温度らしいです。
暗算ではとても無理ですが・・・。

そこはPythonのプログラムで変換すれば良くて(検索すれば見つかります)、
cronで1時間ごとに取得して、CSV形式で保存するようにしてみました。

拍手[0回]


2019年10月26日  RaspberryPi3でT2U Nano

昨日、JetsonNanoでいろいろやってダメだった「tp-link Archer T2U Nano」ですが、
RaspberryPi3でも試してみました。
結果的には、なぜかこちらはすんなり接続できた、という経緯です。


以下、手順メモです。
% git clone -b v5.3.4 https://github.com/aircrack-ng/rtl8812au.git
% cd rtl8812au
% sudo apt-get install bc raspberrypi-kernel-headers


Makefile修正 の下記部分を編集(プラットフォームを選択)
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y

% make
% sudo make install

ここまでできたら、一応再起動。

基本的な手順の流れは、JetsonNanoの時とほぼ同じですね。
ドライバのバージョンが違うのか、GitHubの参照先が違っています。

iwconfig でデバイスが認識できていることを確認したら、
GUIでアクセスポイント(親機)に接続してみて・・・、すんなり接続できました(笑)
しかも、5GHzにもちゃんと対応できてそうですし。

ちなみに、このドライバをJetsonNanoでコンパイルしたらいけるのかな、と思って試してみましたが、
途中でコンパイルエラーが出たりしたので断念。
じっくりデバッグすれば使えるのかもしれませんが・・・。

実はRaspberryPi3の方も、標準WiFiが不安定になってきていたので、
今回のT2U Nanoがこちらに転用できるなら、使い道ができてそれはそれで良かったような。

拍手[0回]


2018年02月17日  RaspberryPi3 追加購入

日本橋のシリコンハウスで、RaspberryPi3(2台目)を買ってみました。


もともと、古いRaspberryPi1をMPDサーバ用に使っていたのですが、
数ヶ月前に壊れて起動しなくなってしまったので置き換え用です。

本当はZero Wで十分だったのですが、品薄のせいか、セット販売ばかりで割高感です。
SDカードとか、電源とか、ケースとか要らないから、
単品で\1000ぐらいで買えたら、気軽にいろいろ使えそうなんですけどね。。。

今回買ったのは、RSコンポーネンツ日本製+電源付きで\5800でした。
単品のelement14中国製だと\4800だったので、ちょっと悩ましいところです。
ちなみに、単品のRSコンポーネンツ日本製は\5800という謎の値段設定。
つまり、電源はタダ(おまけ)ってことでしょうか(笑)

拍手[1回]


2016年11月20日  MPDサーバ構築

1ヶ月ほど前に買ってみたRaspberry Pi3は思ったほど使い道がなさそうだったので、
Pi1で運用していた自宅サーバと入れ替えてみました。
いろいろサクサク動くようになりました♪

余ったPi1を使って、今度はMPDサーバを構築。

サーバ運用のときは信頼性重視で有線LANを使っていましたが、
信頼性もほどほどでよくなったので無線LANに変更。

音楽データも、サーバ(Pi3)に接続しているHDDをNFSで共有させているので、
MPD側(Pi1)には特に何も置く必要もなく。

さすがに内蔵音源はノイズがひどいので、余っていたデジットのUSB-DACを接続。
それを中国製デジタルアンプでスピーカ駆動して、MPDシステム一式完成です。

ちなみにこんな感じ。


相変わらず100均のファイルケースに入れられたRaspberry Pi本体(緑色の基板)と、
一緒にねじ込んでみたUSB-DAC(白いケース)。
左奥の銀色がLepaiのデジタルアンプ。
ついでに、左手前が操作用のスマホ。

意外とシンプルに収まりました。
というか、けっしてオーディオ機器には見えないチープさ・・・(笑)

拍手[0回]


2016年11月20日  Raspberry Pi 設定あれこれ(MPD編)

Music Player Daemonです。
音はRaspberry Piから出てきますが、操作はWindowsPCやスマホからできるようになります。

・インストール
% sudo apt-get install mpd mpc

・起動
% sudo service mpd start

・各種設定
/etc/mpd.conf
の下記のコメントを外す。
auto_update    "yes"
mixer_type      "software"              # optional

auto_update → データファイルを置いたときに自動的にリストが更新されるようにする。
mixer_type → ソフト側で制御できるようにしておく。

・データディレクトリをリンク
% cd /var/lib/mpd/music
% sudo ln -s /mnt/hdd1/mp3/ .

基本的に音楽データは /var/lib/mpd/music の下に置きます。
直接置くか、リンクするかはどちらでも良いです。

・再起動
% sudo service mpd start

無事、MPDサーバが起動できたら、WindowsのGMPC(Gnome Music Player Client)や、
AndroidのDoroidMPDあたり接続して、リモート制御することができます。

・USB-DACの設定
RaspberryPiの内蔵音源は音が悪いので、外付けのUSB-DACを使いたいところですが、
USBに挿しただけでは使えません。
% cat /proc/asound/cards
で、USB-DACが認識されていることと、優先度が低いこと(内蔵音源の方が高いこと)を確認

USB-DACを優先させるために、設定を変更します。
方法はいろいろあるようですが、内蔵音源が不要であれば殺してしまったほうが早そうです。
/boot/config.txt
の下記の部分をコメントアウト
# Enable audio (loads snd_bcm2835)
#dtparam=audio=on

ちなみに、ネットで検索してみたところ、
/etc/asound.conf を修正する方法や、
/usr/share/alsa/alsa.conf を修正する方法や、
/etc/modprobe.d/alsa-base.conf を修正する方法
が見つかりましたが、どれもうまくいきませんでした・・・。
(やり方がまずかったのかもしれませんが)

ということで、一番確実な内蔵音源を殺すという方法で対処しています。

一度リブートしてみて、USB-DACが認識されていて音が出てくれば、設定完了です。

拍手[0回]


2016年11月19日  Raspberry Pi 設定あれこれ(NFS編)

Raspberry Pi1とPi3の2台を使って、外付けHDDをNFSで共有してみました。

サーバ側の設定
・インストール
% sudo apt-get install nfs-kernel-server

% sudo vi /etc/exports
に下記の内容を追加
/mnt/hdd1/    192.168.24.0/255.255.255.0(rw,sync,no_root_squash)
  ※クライアント側のIPアドレスが192.168.24.0-255の場合の例
  255.255.255.0はサブネットマスク

・起動
% sudo /etc/init.d/rpcbind restart
% sudo /etc/init.d/nfs-kernel-server restart

・確認
% showmount -e
Export list for raspberrypi3:
/mnt/hdd1 192.168.24.0/255.255.255.0
みたいなログが出てきていれば、設定できているはずです。

クライアント側

・インストール
% sudo apt-get install nfs-common
% sudo apt-get install autofs

・確認
% sudo showmount -e <サーバ側のIPアドレス>
Export list for <サーバ側のIPアドレス>:
/mnt/hdd1 192.168.24.0/255.255.255.0
みたいなログが出てきていれば、サーバが参照できるようになっています。

・手動マウントする場合
% mkdir /mnt/hdd1
% sudo mount <サーバ側のIPアドレス>:<サーバ側のディレクトリ> <クライアント側のディレクトリ>
(例) % sudo mount 192.168.24.93:/mnt/hdd1 /mnt/hdd1

・自動マウントする場合
/etc/fstab
<サーバ側のIPアドレス>:<サーバ側のディレクトリ> <クライアント側のディレクトリ> nfs defaults 0 0
(例)
192.168.24.93:/mnt/hdd1 /mnt/hdd1 nfs defaults 0 0
を追加して再起動

拍手[0回]


2016年11月13日  Raspberry Pi3で遊んでみた

土日で、しばらく放置していたRaspberry Pi3で遊んでみました。

とりあえずAndroidのイメージを拾ってきて試してみました。
Android7.0は起動せず(遅すぎて待ちきれなかっただけかもしれませんが)。
Android6.0は無事起動しましたが、かなり遅い。
Cortex-A53の4コアだから、ロースペックなスマホとたいして変わらないはずなんですが。。。

ちなみに、ポケモンは対応していないけど、パズドラなら対応しているみたいです。
とはいえ、GooglePlayがまともに動かなくて全然インストールできませんでしたが(笑)
どっちみち使い道なさそうなので、まあいいけど。

続いてWindows 10。
と思っていたのですが、Raspberry Piで使えるのは「Windows 10 IoT Core」というもので、
普段イメージしているWindows 10とは全然別のものなのだとか。
ややこしそうなので、インストールするまでもなくやめました。

結局、無難にRaspbianで使うのが一番良さそうです。
ということで、現在Raspberry Pi1で運用しているサーバを置き換えてしまおうかと思い、
まっさらな状態からインストール&各種設定中。
この前Pi1の方もインストールしなおしたところだし、ちゃんとメモも残してましたので、
今回はインストールも捗ります。
あと、さすがにPi1とPi3では性能が違いすぎて、サクサク感がだいぶ快適(笑)

拍手[0回]


2016年10月21日  Raspberry Pi 設定あれこれ(samba編)

sambaをインストールして、WindowsPCからも見えるファイルサーバを構築します。

samba

・インストール
% sudo apt-get install samba

・swatインストール →ダメでした
% sudo apt-get install swat
以前はsambaの設定変更するのにswatを使っていたのですが、
今はもうなくなったらしく、インストールできませんでした。

・webminインストール
swatの代わりに、webminをインストール。

/etc/apt/sources.list
deb http://download.webmin.com/download/repository sarge contrib
を追加する。そのあと、
% wget http://www.webmin.com/jcameron-key.asc
% sudo apt-key add jcameron-key.asc
% sudo apt-get update
% sudo apt-get install webmin

・webmin設定
ブラウザから
https://IPアドレス:10000/
を開いて、rootのパスワードでログインする。

webminではシステム管理の機能がいろいろ入っているようですが、sambaの設定を行う場合は、
サーバ→Samba Windows ファイル共有 あたりです。

新規のファイル共有を作成 から適当に設定していけば、
WindowsPCから見える共有フォルダが作成できると思います。

拍手[0回]


        
  • 1
  • 2
  • 3