STM32 Nucleo Board STM32F042K6 外部電源で動作させる

STM32 Nucleo Board STM32F042K6はプログラミング用のUSBケーブルでボードに電源を供給してLチカ等動作させることができます。

ファームを書き込んだボードを外部電源5Vで動作させようとしたときにつまずいたので備忘録を残しておきます

外部電源5Vのみでボードを動作させるにはNRST-3.3V間をジャンパーさせます。
どうもST-LINK関連のバグのようで将来は解消されるかもしれません。

上のようにジャンパー線を使います。

ただし、USBケーブルからファームを書き込むときはこのジャンパーを取り除いてオープンにしなければなりません。

TrueStudio->sprintfでfloatを表示する

TrueStudioでNUCLEO-F042K6のファーム作成時の備忘録

ターゲットはSTM32 Nucleo Board STM32F042K6

 


CubeMXでひな形を作成し、TrueStudioでコーディングするときにデフォルトのままでは
sprintfをつかってfloat型の変数を文字列に変換しようとすると
sprintf(msg,”Float variable=%.2f”,fVariable);
msgにはうまく変換された文字列が生成されない

 

この対処法は以下のようにします。

 

プロジェクト>プロパティ>c/c++ Build>Setting>Tool Setting TAB>C Linker>Miscellaneous
のOther optionsに

-u _printf_float

を追加し適用するとfloatを期待通りに文字列に変換してくれます。

 

 

 

KiCAD オートルータの覚え書き

Arduinoやmbedを使ってテストし基板に残しておきたいと思い、KiCADというPCB作成のCADをインストールしました。KiCADは外部のプログラムを使ってオートルータを実現することが可能です。

オートルータ設定の覚え書きになります。

 

入手先

githubの以下のサイトからファイルをダウンロードします。

ダウンロードしたファイルを解凍します。

使い方

解凍したフォルダfreerouting-master を適当なフォルダへ移動します。

freerouting-master>binaries 内にあるexeファイルがオートルータのアプリになります。

これを実行するにはJavaが実行できる環境をあらかじめ作っておくことが必要です。

 

意味のない回路ですが、この回路をpcbnewのメニューで

をクリックします

 

上のダイアログがでたら、現在のボードをSpecctra DSN ファイルへエクスポート をクリックします

プロジェクトファイルと同じフォルダにに保存します。

 

オートルーターのプログラムを起動します。

open your own design をクリックして保存した.dsnファイルを開きます

以下のような画面が立ち上がります

 

メニューのAutorouterをクリックします。

すると画面上にオートルータが実行されパターンが形成されます。

 

簡単な回路なのでルーティングは一瞬で終了しますが、複雑な回路だと数時間かかるようです。

 

配線が完了したのでFile>Export Specctra Session File をクリックします

 

はいをクリックしてファイルを生成します

 

pcbnewに戻り、

上のダイアログでスペクトラセッションファイルのバックインポート をクリックします

エクスポートで作成された.sesファイルを選択し開きます。

はいをクリックします。

 

pcbnewにもどると自動配線の結果が反映されているのが確認できます。

 

デザインルールを指定しておくと、例えば電源ラインだけ指定の太いパターンにするなどできるようです。

クロスプラットフォームのPascalコンパイラLazarusをインストールする

Windows用にちょっとしたユーティリティプログラムを作る必要があり、どのような開発環境を使えばよいかgoogleに相談しました。フリーでGUI作成が容易なものがほしいという条件で探したところ、Lazarusをみつけることができました。

Lazarusは、Linux,Win32,OS/2,macOS に対応したオープンソースのコンパイラでGUIの作成も容易です。昔使ったことのあるDelphiと非常に似ていて、Delphiのフリー板といったところでしょうか。

 

 

どこで入手するか?

Lazsrusは以下のサイトから入手できます。

https://www.lazarus-ide.org/

 

[Download Now]ボタンをクリックしてLazarusをダウンロードします。

自分のWindows環境では以下のファイルがダウンロードできました。

ファイルの名前から類推すると64bit対応になっているようです。

 

インストール

ダウンロードしたインストールファイルを実行します。

NEXTボタンでインストールを進めていきます。

途中にいろいろとダイアログがでてきますが、上のダイアログでインストール完了です。

デスクトップにアイコンを置くというオプションを選択したので上のようなアイコンが生成されました。

 

起動してみる

早速起動してみます。

IDEはほとんどDelphiと同じですね。
標準のコンポーネントも結構豊富で、ちょっとしたアプリなら標準機能だけで作れます。

作成したプロジェクトを保存するときに、Lazarusのほうではフォルダを作ってくれないので、あらかじめ自分で作成したフォルダに保存します。

 

フォームにボタンを一つおいてボタンをダブルクリックするとイベントハンドラを記述できる部分にエディタ内で移動するので以下のほうに記述します。

IDE上部のツールバーの実行ボタン

をクリックすると以下のフォームが表示され、ボタンをクリックすると

MessageBoxが表示されます。このへんもDelphiと同じです。

 

 

コンポーネントを追加する

今回自分で作成するアプリでシリアル通信が必要であったので以下のコンポーネントをインストールします。

TLazSerial

 

どこで入手するか?

 

以下のgithubサイトからダウンロードします。

https://github.com/JurassicPork/TLazSerial

ダウンロードしたファイルを解凍します。

解凍したフォルダを自分の適当なフォルダに移動します。

 

インストールの仕方

解凍したフォルダ TLazSerial-masterの中のLazSerialPort.lpkをlazarusで開きます。

上のダイアログがでるのでOpen packageをクリックします。

上のダイアログがでたら、Use>Installをクリック

 

Yesをクリックします

コンパイル後Lazarusが再起動され、IDEを確認するとSerialPortコンポーネントがインストールされているのが確認できます。

 

動作確認

Lazarusのフォルダ内のtestにあるプロジェクトを開いてみます。

 

実行ボタンをクリックしてエラーなくコンパイルできることを確認できました。

Portのsettingを開いてPortの選択プルダウンを表示すると自分のPCに対応したCOMが表示されたのでおそらく正常に動作するのでしょう。あとは、実際にアプリを作って確認したいとおもいます。

 

 

[Kotlin]Your version of Kotlin runtime in ‘org.jetbrain:kotlin-stdli:1.2.10@jar’ … のエラー対応

以前作成したAndroid Studioのプロジェクトを開くとタイトルのようなエラーがでるようになりました。

plugin versionが1.2.21なのに1.2.10が指定されているからのようです。

下のようにext.kotlin_versionを1.2.21とします。変更前はプロジェクト作成時の古いバージョンが指定されていました。


これでエラーはでなくなりました。

[To do] Android Studio 3.0.1 FirebaseUI sampleでエラー

Android Studio 3.0.1でFirebaseUIのアンプル

https://github.com/firebase/FirebaseUI-Android

を実行しようとすると以下のようなエラーがでて実機、シミュレータ共実行することができません。

 

Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ‘:app:processDebugGoogleServices’.
> Please fix the version conflict either by updating the version of the google-services plugin (information about the latest version is available at https://bintray.com/android/android-tools/com.google.gms.google-services/) or updating the version of com.google.android.gms to 11.8.0.

* Try:
Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output. Run with –scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s

 

上のような記述があったので以下の手順でInstant Runを無効ししました。

 

Instant Run 無効化の手順

File > Setting… でダイアログを表示


ここでEnable Instant Run…  のチェックを外します

この状態で実機とシミュレータで実行できるか確認しましたが、まだ同じエラーとなってしまいます。

もう少し調査が必要です。

google map 画面中央にターゲットマークを表示する[Kotlin]

Androidアプリでgoogle mapを表示した画面で画面中央にターゲットマークを表示したいとおもいます

ターゲットマークはWEBからフリーで入手できる画像

をつかいます。背景が透過色になっています。

プロジェクトの以下のフォルダに画像をコピーしておきます。

Layoutを改造します

全体をConstraintLayoutにしました。ターゲット画像を表示するImageViewはマップのFragmentと一緒にFrameLayoutに格納します。FrameLayout内のパーツは重ねて表示されることを利用します

 

ImageViewに表示する画像は、WEBからダウンロードしたターゲット画像を指定します。

このままだとターゲットマークが大きすぎるので、サイズを小さくします

また画面中央に表示されるようにgravityの設定を水平、垂直ともにcenterにします

 

アプリを実行すると以下のように表示されます

 

画面をゆびで動かすとターゲットマークは中央に維持されたままです。

 

ここまではkotlinのコードはいじらずに実現できました。

Android Studio のテンプレートでgoogle mapアプリを作る[Kotlin]

Kotlinの勉強がてらにgoogle mapのテンプレートでプロジェクトをつくりました。

 

 

新しいプロジェクトで

google mapを選びます。言語はKotlinです。

新規プロジェクトを作ったときに最初に表示されるページで指示通りにgoogle mapsのアカウントをつくりKeyを入手し入力します。

エミュレータまたは実機で実行すると以下の画面が表示されます。

 

シドニーにマーカが立っています

 

コードは以下のコードが生成されました

map部分はFragmentになっています。

Fragmentはライフサイクルを持ったパーツのようなもので以下のサイトを参考に学習しました。

https://qiita.com/Reyurnible/items/dffd70144da213e1208b

Kotlinが何かをしりたいかたは以下のリンクが参考になるとおもいます。

http://gihyo.jp/dev/serial/01/jvm-kotlin/0001

Kotlinの本家に以下になります

https://kotlinlang.org/

 

このテンプレートを元にいくつか機能を追加していこうとおもいます

パッケージ名を変更する。[Android Studio3] 備忘録

久しぶりにAndroid Studioを起動。バージョンがいつのまにか2から3にかわっている。

また新しい言語kotlinがサポートされるようになりました。

ネットからサンプルをダウンロードして最初にしなければならないのがパッケージ名の変更。以前はいろいろな場所を手動で変更したような記憶があったがrefactorをつかうと簡単にできた。

 


変更前はmyapplicationというパッケージ名


app>java>パッケージ名の上でマウスを右クリックRefactor>rename をクリック


RenamePackageをクリック


新しいパッケージ名を入力、myapplication2に変更Refactorをクリック

Do Refactor をクリック。これでパッケージ名が変更されました。

 

簡単に変更できました。

iOS:daeファイルのカメラを使う[SWIFT4]

SceneKitでdaeファイルを取りこんだ時にdaeファイル内のカメラを削除して利用していましたが、コード内で自分でカメラを設定した時になかなかカメラの位置あわせが思うように行きませんでした。

方針転換しdaeファイル内のカメラを使うことにしました。

 

Freeの3Dモデルをダウンロードしgameテンプレートで作ったプロジェクトに取込みます


使ったモデルは上のような丸太です。一部テキスチャがぬけていますがこのまま進めます。
左のシーングラフを見るとカメラの名前はCameraとなっています。

 

ソースは以下のようになります

daeファイルのカメラにアクセスする部分は以下の部分です。
let cameranode = scene.rootNode.childNode(withName: “Camera”, recursively: true)
if cameranode != nil {
print(“camera position:\(cameranode?.position)”)
print(“camera euler angle:\(cameranode?.eulerAngles)”)
}
daeファイル内のカメラの名前Cameraを使って該当するnodeをみつけます

実機で確認すると画面の真ん中に表示されました。

 

コンソールに出力したカメラの位置とオイラー角は以下の通りです。


オイラー角はシーンエディタでは度で表示されます。ラジアンに変換するとコンソール出力と一致しているのがわかります

 

シーンの元ファイルはblenderで作る予定ですが、blender内でカメラを設定し、カメラを含めた状態でdaeファイルに変換する方法を今後採用したいと思います。