Macでscpコマンド使う時、

相手がRaspberry PIの時ですが、ラズパイ側のターミナルからMacのファイルを指定するとMacのセキュリティを緩めないといけないから、Mac側のターミナルからアクセスするのが正しいだろうと思う。相手次第ですがね、

こんな感じで、

% scp -r /Users/ファイル or フォルダ指定 pi@raspberrypi.local:~/

本来ならafp使いたかったけど、何故か動かないから代替えでファイル転送使う時に感じたこと。

 

admin

Go Lang

今時の言語のGoをしばらく触ってみます。とりあえずのゴールはラズパイでWebサーバー構築してM5Stackとやりとりすること。node.jsと同等の機能が実現できるはずで、コンパイラーであるだけ高速でしょう。

とりあえずM1 Macと初代に限りなく近いRaspberry PIにインストールしてみました。

— M1 Mac環境 —

<install>

% brew install go

するだけ、

% go version

go version go1.19.4 darwin/arm64

が今の最新版数のようです。

VScodeはGoマークの拡張機能を二つインストールしただけでソースコード編集ができます、追加で必要ならばインストールを要求されます。

 

<directory>

ユーザディレクトリ直下にgoという名前で作成されます。

 

<初めてのソース>

定番ですが、

package main
import "fmt"
func main(){
	fmt.Println("hello Go")
}

WordPressのアドオン古くてGo言語選択できないので近そうなC++にしています。

import “fmt”は他言語のimport “sys”のようなものでしょうか。

 

<module>

そこそこの規模になるとモジュール化が必要ですが、先ほどのソースディレクトリにモジュール用のディレクトリ作成してモジュールを作成します。

% mkdir mod
% cd mod
% go mod init mod 
% cp ../hello_go.go ./
% go mod tidy
% go build
% ./mod
hello Go

全体のディレクトリ構成は以下のようになります@VScode

通常の% go runでは実行ファイルはテンポラリに作成され実行後に削除されるようですが、実行ファイルを残すためには% go buildを使います。

このようにgoコマンドのパラメータ指定で作業をコントロールできるようになっています。

 

— RaspberryPI 環境 —

https://zenn.dev/ysmtegsr/articles/20d6e0c7159be2

を参考にインストール、

$ wget https://go.dev/dl/go1.19.4.linux-armv6l.tar.gz

$ sudo tar -C /usr/local -xzf go1.19.4.linux-armv6l.tar.gz

/usr/local/go/bin/に移動して、

$ ./go version
go version go1.19.4 linux/arm

まだパスが通っていない、

パスを通す、

$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
$ echo 'export PATH=$HOME/go/bin:$PATH' >> ~/.bashrc

$ source ~/.bashrc

Macと同じような簡単なソースファイル(main.go)をgo_prj配下に作る、

package main

import "fmt"

func main() {
    fmt.Println("Hello world")
}

$ go mod init go_prj

$ cd go_prj

$ tree ../go_prj
../go_prj
├── go.mod
├── main
└── main.go

$ go run

コンパイル実行だとRaspberryPIでは数秒待つから遅い

$ go build -o main

$ ./main

で実行ファイル呼び出すと高速(当然ですが)、この起動時間待ちの雰囲気はnode.jsの起動でも同じだからRaspberry PiではGoをbuildして使うのが普通になると思います。

 

Go言語の第一印象

随所に現代的(ビルド環境やソースコードの検証など、まだイントロしか読んでいないからこの程度)なところを見ることができます。既存の言語はバージョンアップでも過去との互換を考えないといけないわけですが、新たな言語はその時点で必要な機能を順位づけして言語仕様や開発環境を決めることが出来るわけですから。

 

admin

LTspice

現在は普通にSpiceとして使えるシミレーションソフトも無償なんですね。ただのものはとりあえず入れてみました。

ただ、MacだとU.IがWindowsとは別物で、右クリックで出てくるメニューから機能を設定することになります。従って初期画面は素っ気ない感じです。

使い方は例えば回路CADであるKiCadなどと類似ですね。所詮回路図作成必要だから。

図は、L/C/Rの直列回路に正弦波のバースト信号を入力した時の応答シミレーションです。

電圧源と抵抗とインダクタの接続点の二箇所の波形を表示させています。デバイスのSpiceモデルは潤沢に整備されているから、アナログ回路のシミレーションには使えます。とはいっても道具ですから、基本的なリテラシィがないと結果が無意味なのは他も同じ。

 

admin

M5Stack内蔵のADCを使ってみる

ネット記事によると精度はそれほどでは無いようですが、実際に使ってみました。

M5StackのAD変換できるピンは35/36になりますが、35ピンに可変電源を1/2.5分割して供給。

測定精度は数%の誤差はあるようですが、用途によっては使えるでしょう。たとえば倒立振子のモーター駆動用電池の電圧をチェックするような目的には。

ノイズは結構盛大にありますから、何回か測定して平均値を取るようにしたほうがいい。

アナログメーター風の表示にはArduinoIDEのサンプルプログラム(TFT_Meter_liniear)を改造して使用。

 

admin

倒立振子(その後)

モーターの駆動にはNiH単三4本使っていますが、電池電圧が低下するとトルクも変わってくるのでPIDパラメータもその変化に対応して変えないと安定状態を保てなくなるという当然の結果。

現実的な対応としては、

① 電池電圧を安定化する

少なくともDD-CON必要だし、電圧ドロップ考えると電池電圧足りないだろうからハード作り直しレベル

② 電池電圧の変化に応じてモーターへの最低印加電圧を可変する

float MOTOR_POWER_MIN = 100;
float MOTOR_POWER_MAX = 250;

ここでMOTOR_POWER_MINを変えてやる、今はモーターが回り始めるぐらいの電圧になるように調整していますが、当然電圧低下するとこの値を変えてやらないとダメなのは自明。

理屈ではM5StackのADコンバーター使って可変することはできそうだね、やるやらないは別にして。

 

admin

M5Stackでオンメモリのイメージデータを表示する

SDカードを使うのは、特に書き込み中のデータ保証ができないのがM5Stack、メモリはそこそこ余裕があるのでメモリ上にイメージファイルを展開してそれを表示する関数、

M5.Lcd.drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x, uint16_t y)
を使うとオンメモリでの画像表示ができます。M5Stackはjpg形式のデータしか表示できないようですが、フリーのpng形式イラスト素材を持ってきてPhotoScape Xでjpgに変換して、以下のリンクのPythonスクリプトで配列データに変換します。
変換した配列データをソースコードとして扱いコンパイルすると画像データを含むバイナリが作成できます。
こんなデータを使いました。
ソースコードは、
M5Stack上の表示は、
こんな感じで表示できます。
admin