nRF52840の開発環境を作成する’24.10月編

二年前、Nordic Semiconductor社のBluetoothマイコン: nRF52832 のプログラムを作成しました。国内メーカのBluetoothマイコンより安価で多機能、豊富なライブラリ、処理スペックも上で弊方の中では高評価でした。(ただし情報が全て英語にはなってしまいますが、、、) 今回新しい企画でBluetooth通信を行うため、上位マイコンnRF52840 を選定しました。こちら Long Range に対応しており離れた車両と通信接続時間の長さ期待できます。 2年前とは手順も増えて複雑、違いも大きかったのでその覚え書きです。


2年前は、汎用の組込み用IDE: SEGGER (セッジャーと呼びます、セッガーかもしれません) のNordic Version 5.60 が使えていました。現在Version 5.68としてここで配布はされていますが、以下のようには、エラーが出たり、ライセンス発行画面が真っ白です。

WEB上の一般記事に、VS Code + Nordic Extension のみになったと記載がありました。


環境セットアップには python が必要です。指定されたエディションを使う必要があるようです。少なくとも Microsoft Store で配布しているものは以下エラーが出ました。


DevZone : ユーザ登録システム、登録しましたが、ログインしてなくてもインストールは可能でした。

Zephyr : 標準ライブラリ?


基本は以下のとおりですが、公式手順を見ると、どこまでが自動でどこが手動か分かりにくいです。弊方では一部エラーが出ていたため手入力でも一通り実施しました。

1. J-Link (PCとマイコンと接続するためのインターフェイス ) は nRF Connet SDK でインストールされるため事前インストールは不要。

2.VS Code のインストール。最新でOK。

3. nRF Connet Desktop をインストール。

4. nRF Connet Desktop からnRF Connet SDK をインストール。この時、VS Code の未インストールだと進めません。v2.7.0は以下のエラーが発生、v2.6.2をインストール。なお2年前とくらべ SEGGER のインストールメニューは消えています。

5. nRF Connet Desktop からnRF Command LineTool をインストールを促され、ダウンロードベージに飛ぶので、D/Lしてインストールします。後から入れてもOK。

6. chocolatey というWindow用のパッケージマネージャをインストールします。まずnuget.exe (Visual Studio用機能追加の仕組みのコマンドライン版)をダウンロードし、以下のコマンドをたたきます。

7. chocolatey を用いて、python など必要パッケージをインストールします。何なのかは理解していません。

phtyon は、nRF Connet SDK で自動で以下にインストールされている模様。今回は公式手順どおりに、chocolatey で入れたものを使用しました。

8.python の pip3 を用いて、指定されたパッケージをインストール。以下コマンドラインシーケンスです。

9.ARM 用gccをダウンロードして、指定場所に配置。弊方は配置自由度のあるzip版を選択。

10.Windows上で、gccのパスを通す。

11.VS Code に Nordic 用Extensionを追加します。nRF Connect For VS Code Extension Pack でまとめられています。それを開いて追加します。

以上、たいへんな長旅でした。


1.VS Code に左ペインの nRF Connet アイコンを選択し、現れるツリーからProjectを作成します。

2.以下のようにProject名を入力。

3.APPLICATIONのツリーから、Build構成以下のように生成します。

4.生成されたProject全体の様子は以下のとおりでした。2年前 nRF52832 で SEGGER で作成したコードを流用しようと考えていましが、ライブラリの構成が全くちがうように見えます


今回はプロトで過去のHowToを流用して手早く準備したい。ゆくゆくは製品化時に最新化することとし、既存のSEGGERにて nRF52832 の.Project file を、nRF52840 の.Project file に手動マージし対処しました。

WinCvsのpserver設定

現在WinCvsの設定情報中々ないので、その設定覚書です。

Windowsのコンピュータ名とアカウント名を設定します。リポジトリエリアス名は次のように設定します。

コントロールパネルから、CVS For NT を選びます。CVSNT画面から「設定変更」ボタンを押したあと、リポジトリタブを開きます。そこでWindowsパス名に対するエリアス名を設定します。

コントロールパネルから、CVS For NT を選びます。サービスの状態タブを開き、開始ボタンを押します。CVSサービス CVSロックサービス の2つがあります。 ロック の方は開始できないときがあるようですが気にしない。

開始状態は、Windowsサービス画面でも確認できます。

リポジトリがローカルであってもログインしないアクセスできません。WinCvsのメニュー 管理 -> ログインを選びます。ログイン画面からOKボタンをおし、パスワード画面を出します。ここでWindowsアカウントのパスワードを入力します。CVSは、UNIX系の産物なので別設定するのかと深読みをしないこと。

成功すると何もメッセージがでません。エラー時のみメッセージがでます。

WinCVSでユーザ不一致でcommitできない場合

弊方では CVS を使いつづけています。理由は、SVNGit はファイル単位で管理できないためです。CVSは ソースファイル.v で管理され、.vファイル 単位でコピー削除移動が可能。.vファイル はテキスト形式なので、壊れても直せる。各パスのCVSディレクトリの管理ファイル Entries / Repository /Root をもシンプルなので直接いじりやすい。Windows上では、WinCVS および CVSNT を用います。いまはどこで配布されているのかはよく分かりませんが、昔とっておいたものを使いつづけています。一応、Windows11 でも動作しています。

たまにしかセットアップしないのでその覚え書きです。


さてWinCVSで、コミット時、急に以下のようなエラーが発生するようになりました。

cvs commit: user ‘ユーザ名’ is not a valid editor of the file ‘対象ファイルl’
cvs [commit aborted]: correct above errors first!

弊方では、リボジトリはローカルPCに pserverアクセスです。しかし、一部local参照しているProjectもあるため、リボジトリディレクトリを、Windowsのシンボリックリンクで割り当ててます。その関連で、何かWindowsの仕様がかわったのでしょうか?

pserver から localアクセスに変更しても変わらず。リボジトリのWindows上のユーザ権限を見直してもダメ。結局原因は以下でした。

しょうもない原因でした。

e2studioでRH850F1KHを使うときの注意

弊方では、CS+ より e2studioの方を優先して使ってます。eclipceの機能や各種プラグインが使え(特にvim)効率が高く、CS+ と対マイコン機能も遜色ない。ただマシンパワーが少々必要です。

今回、RH850F1KHを使うにあたり気付いたことをメモです。正しくはリリースノートに記載されているとは思います。今日のところはCC-RH無償版です。

e2studio 2022-10 では未対応

組込みのセオリーではありますが、他案件でこのバージョンを使っているためUpdateしたくないのですが、未対応でした。以下詳細です。

ヘルプ -> e2studioについて -> インストールの詳細 -> Renesas Device Support から対応マイコンを確認するとツーリーには現れますが Debug 以外はNo がついています。どういう意味なのでしょうか? もしかしてCC-RH無償版ではNG!?

ファイル -> 新規 -> Renesas C/C++ Project -> Renesas RH850 -> Renesas CC-RH Executable Projet と選択し、プロジェクトダイアログ 名を入力、次のダイアログでターゲットデバイスの「」をクリックし、Device Selection画面からは F1KH はでてきませんね。

昔昔は、マイコン毎に「デバイスファイル」がデリバリされていて、それをIDEにインポートしてましたが今はそうではないんですね… ルネサスダウンロードを探しても見つかりません。

しかたなくアップデートを試みましたが、JDK環境エラーになりました。

互換は、JDK17 でPCには JDK18 がいれてあります。JDK18 は認識されず OpenJDK が認識され引っかかっています。JDK17/18は今はOracleの管理下のプロダクトで、OpenJDK はそれとは違う管理されていないもののようです。e2studio 2022-10 に以下のように一緒にインストールされていたみたいです。

e2studio 2024-07 では対応

JDKの環境も、e2studio 以外にもいろいろ影響が考えられるので、比較的クリーンな別PCに最新版2024-07をインストールすると、F1KHでプロジェクト生成ができました。以下詳細です。

Renesas Device Support の対応マイコンツリーは以下のとおりでした。

プロジェクト生成時のDevice Selection画面の内容は、

一応ひな形自動生成ツール スマートコンフィグレータ で自動生成し、まだ基板は工作中なのでRH850シュミレータ で実行までしてみてOKでした。シュミレータの簡単な設定方法は以下のとおりです。

RH850コンパイラ状況

とりあえず今からコンパイラ要購入でなくてヨカッタです。

ちなみに CC-RH は C++ 未対応なんですね。C++はサードパーティ製のみ。

gcc も RL78、RX系、V850は対応してますが、RH850は無いようです。

C++ で効率よくつくりたいものです。

e-taxで累積赤字決算申請する3:市町村向け

前記事では都道府県への申請を行いました。

つづいて市町村への申請をします。

PCdesk(DL版) を再起動し、市町村用のアカウントでログインします。右上の納税者切替ボタンはうまくいかない感じです。あとは県の場合と同じです。

作成する申請書は、「第二十号様式」のみです。この留意点は、この申告の基礎 は入力してはいけません。年号が選択できるようになっていますが、ついつい触ってしまわないように気を付けます。

従業員数、期末現在の資本金額、右下のチェックボタン3つ、決算日 を入れておいています。

納税情報の申請時には、税目区分法人市町村民税 に切り換えて検索する必要があります。

その他

起業初年度で、起業月の途中日から開始した場合は、均等割の計7万円が日割りで割引かれます。初年度は知らずに申請しましたがシステム上チェックはかかりません。後から、県の方から手紙が来て返却されました。県の方から「市の方も申請すれぱ返却できるはず」と言われいすました。(市からは特に連絡なし)

まとめ

eLTAXの操作は、余計な画面や確認が多くて難しいです。しかし手書きして税務署に行くよりははるかに効率的ではあります。しかしながら、操作がWEBだったりPCアプリだったり、国用と地方用が別だったり、一つにまとめれば開発費も減り、税金も大事できたのにと思う次第です。

iOSでMQTT通信を使う ‘24.7月編

IoT用通信で利用されるMQTTですが、 iOS で適用する案件があり対応したので要点の覚え書きです。MQTT Broker が何なのかは知らされておりませんが、汎用的なものだと思います。

AWSでは各プロットフォーム毎にライブラリが提供されていました。汎用タイプのMQTTとなると使えるのは以下の2とおりでした。Get/Post methodのように、各プラットフォームで公式APIは未だ無いみたいです。いづれもOpenソースなので信頼性は要注意です。

ライブラリプラットフォーム公開URLMQTTバージョン備考
MQTTnetXamarin / Visual Studiohttps://github.com/dotnet/MQTTnet3.1.0、3.1.1、5.0指定可。.NetSockectがコアのためiOSでも動作する。
Xamarin.MQTTXamarin / Visual Studiohttps://github.com/xamarin/mqtt指定不可。開発止まっている。MQTTnetを簡易callしたもので利用価値低い。
CocoaMQTTSwift / Xcodehttps://github.com/emqx/CocoaMQTT3.1.1、5.0指定可。
iOS, macOS, tvOS native ObjectiveC MQTT Client FrameworkSwift / Xcodehttps://github.com/novastone-media/MQTT-Client-Framework最終更新日が4年前

上記から現用と思われる2つを確認してみました。

最新 4.3.4.1xxx はConnectで落ちました。ここ一か月間で頻繁にコード更新がかかっています。怪しい。一つ前のリビジョンで一年前くらい 4.2.0.706 をchoiceし通過しました。.net 的なネーミングですが、Microsoftが管理しているわけでもなんでもないようです。

NuGetで「最新安定版」と記載されていても、だれも安定しているか確認していないのかもしれません。

尚、各クラスとmethod/propertyの使い方説明はなく、サンプルコード を見て理解してといった感じです。

iPadOS16互換で、Xode 14.2互換でXcode 15.1です。こちらも最新は落ちました。Gitでバージョン切替えながら試すと、2.1.7 で落ち着きました。


BSD Socket は、CocoaAsyncSocket MqttCocoaAsyncSocket の2つがあり指定できるのですが、後者でないと動きませんでした。下位ライブラリは、MqttCocoaAsyncSocket 1.0.8、Starscrem 4.0.4 でした。

こちらも各クラスとmethod/propertyの使い方説明はなく、Example をみる感じです。今回は他ライブラリが Swift でないとダメでしたので、CocoaMQTT を適用しました。MQTTnet より以下の機能メリットがみられました。

  • サーバ自動接続モードあり。再接続インターバルの指定などもできる。ただ永遠ではない。
  • デバッグモードあり。有効にすると Xcode コンソール に、JSON送信データなどがプリントされる。
  • MQTTnet では未トライですが、SSLモードもすんなりOK。

すこしコードを紹介すると、

ただし接続できたかは、ステータスを監視する必要があります。送信時は、

iOSからMQTTを使用した結果、以下の課題がありそうです。

  • 端末起動直後、インターネットネットにつながっていない期間があるため、MQTT接続のリトライが必要です。 ラズパイ等の場合、shで自由にUNIXコマンドで監視管理できますが、iOS下では自由度がありません。iOSのインターネット接続状態の取得API NWPathMonitor も確実性がないようてす。

またMQTT全般的にいえることですが、

  • サーバに Publish が未到達でも端末側では分からない。そもそも MQTT は高信頼性を目指したものではないのですが、実際に発生するとエンドユーザは怒ります。信頼性仕様の協議と取交わしが必要でしょう。再送やユーザに通知したい場合、サーバ側のカレントデータを読みだしてベリファイするインターフェイスを追加するとが必要だと思います(サーバ側の協力があれば)。もしくは最初からHTTPや独自protocolにしとく。

Xperia Z3 tablet Compact Wi-Fi版をAndroid11当にupdateする2 ‘24.4月編

前記事では基本的なセットアップを行いました。ここでは動作確認した結果の問題点を報告します。

LTE版のSGP621、後継10inch版の Z4 Tablet でも少し危うい感がありましたが、Wi-Fi版 SGP612 では完全にGPSが動作しません。うんともすんともです。以下、GPSTestアプリの実行です。

以下のROMを試しましたが全てダメでした。

  • lineage-18.1-20230301-4microg-CUSTOM-WiFi-z3tcw.zip
  • lineage-18.1-20230428-UNOFFICIAL-z3tcw.zip
  • lineage-18.1-20231011-4microg-UNOFFICIAL-z3tcw.zip
  • lineage-18.1-20240321-microG-UNOFFICIAL-z3tcw.zip

iode-2.15-20230927-z3tcw.zip は試さずですが、祖先は同じでしょうから無理でしょうね。

一度純正ROMに戻して、ダイアル #*#*7378423*#*# によるfactorytestモードで確認してみます。衛星は見つかってますね。ハードウェアの問題ではないといえます。

海外の情報を調べてみます。有名な XDA に SGP621 – GPS can not found any statlites custom ROM というスレッドがありました。このスレッドは、2016年から始まっており、2023年10月21日の記事でも “does not woek” と投稿があります。最終的には改善したという投稿はなかったです。かなり潜在的で長期的な問題であるようです。

ストレージ容量の違うSGP611では動作したという投稿もありました。推測ですが、Wi-Fi版とLTE版でGPS制御方法が違うのではないでしょうか? それを合わせこもうとすると、調査とプログラミングで数日でできるようなハナシでは無くなります。費用体効果からみても誰もやらないのでしょう。SGP612ではGPSは諦めましょう。Z3 tablet Compact でGPSをどうしても使いたい方は、SGP621を手に入れるのが賢いでしょう。

FMラジオの周波数が表示されないです。どのみち周波数バンドが海外になっているので追及しても仕方ない感じです。


カスタムROMは有志の方が作られたもので、メーカのような開発体制はありません。制約があって当然です。少し都合が悪くてもそれ理解しありがたく利用しましょう。

iOSでbackground定周期処理の実際のところ【’24.7月編】

iOS で background ( 端末画面が非表示のとき ) 処理を定期実行させることは鬼門のようです。Appleの情報、ネット記事、有識者の情報 どれも幾分違っていて真実が分かりません。iOSではバッテリ節約が最優先され、background 処理時間に制限が厳しいと言われているようです。 ’24年7月に実装した結果を報告します。

OSiPadOS 17.6
端末iPad 6th
Xcode実機TEST 15.1 、シュミレータTEST 14.2
言語Swift UI

基本 background は「アプリが前面に表示されていないが動作しているとき」ですが、完全なbackground状態にするには以下の配慮が必要なようです。

  • iOS系は 画面スリープ無し に設定できますが、これは有効にしないこと。
  • USBで電源供給したままにしない。
  • Xcodeと接続しない。

またプログラムに、

  • トレースログが取得できる仕組みを作成しておく。

取り掛かりとしてApp の onChange(of:scenePhase) イベント で background と foreground の切替りを検出してました。そのbackground のifスコープにで タイマーをつっこみました。(以下赤字部) これが一番シンプルかなと…カンで組んでみました。

一見動作しているように見えたのですが、途中でお亡くなりになるようです。background に移行してから動作可能な時間制限があるとのことですが、正確にどのくらいか色々試してもよく分かりませんでした。 UIApplication.shared.beginBackgroundTask ~endBackgroundTask を使って時間制限を検出しリカバリする方法も試しましたが、なんだか効果なしです。BGTaskScheduler というのもありますが有識者によると、「定周期background 処理は基本的ニ出来ない」とのことで試さずじまいです。

iOSで background 処理を定期的に行う手法として、GPSによる中心座標からの半径範囲(リージョン)への出入りを検出する方法が、いろいろと紹介されています。これは XamarinのiOS Background処理の説明ページにも記載されています。概念図は以下の通りです。

もちろんこれが適用されるのは、端末がある程度の時間経過とともに移動するシステムに限ります。その検出部のコードは以下のような感じです。

ポイントとしては、

  • 移動しないとBackground実行できません。
  • 定周期でBackground実行する場合は、移動量と時間のCONVERTが必要です。
  • 半径5mに指定しても、イベント発生させるには50~100mくらい移動を要します。
  • UIApplicationDelegateAdaptor を Appクラスで絡めるコード例もありますが、シンプルに CLLocationManager だけで構築できます。

リージョン出入り検出」は、秒、分単位の定周期処理とすると不向きのようです。通常、リアルタイム緯度経度の検出で使用しているCLLocationManager のイベントも、よく観察するとBackground時でも動作していることに気付きました。リアルタイム緯度経度検出 と Background処理を一緒に行えば、もっと早い周期でBackground処理が可能となります。その検出部のコードは以下のような感じです。

ポイントとしては、

  • 移動しないとBackground実行できません。
  • 定周期でBackground実行する場合は、移動量と時間のCONVERTが必要です。
  • 移動距離をもっと小さくすると、秒周期でBackground内でイベント発生させることも可能。(iPadではGセンサも併用している模様)
  • 日中での電池の持ち、iPadなら電池の持ちは心配ない感じ。iPhoneは厳しい感じ。
  • 移動イベント中に、新しい移動イベントが発生した場合、新しい移動イベントは保留される。(保留最大数は未知)
  • リージョン出入り検出と同居可能。

Background内である程度の周期で動作できるようになったら、何秒くらい動作可能か情報が必要です。これも色々な説があるようです。以下のBackground処理ダミーコードで調べてみました。下記コード中の printLog はローカルtxtファイルへの出力付きの print 関数の自作ラッパーです。5秒置きにlogを残すことでどこまで動けるか確認しました。

結果としては、

  • 最小で45秒までは動けてはいた。公称値が30秒とのウワサ。
  • 最大120秒程度まで伸びる場合あり。CPU使用時間が影響しているのかもしれない。
  • 許容時間超過後、TASKは休止状態となり、Foregroud移行後に動き出す。
  • 製品コードでのBackground処理はScokect通信です。これはうまくいきました。

Xperia Z4 Tablet LTE海外版をAndorid11相当にUpdateする【’24.9月編】

めずらしい Xperia Z4 Tablet LTE海外版 SGP771 をAndorid11相当にカスタムROM化時の、国内版である SO-05G との違いを報告いたします。

カスタムROM化の鬼門である “Bootlooder Unlock Allowd” は、海外版では下記のとおり YES でした。これを No → YES にする必要はないです。SO-05G では現在解除サービスが無くなってしまいカスタムROM化不能ですが、 SGP771 をは可能ということになります。

Bootloader を unlock するコマンド “fastboot oem unlock” にて、以下のようにCommand not allowed” という見慣れないエラーが発生し unlock できません。Z3 Tablet Compact 海外版ではすんなりunlockできていたのですが、、、

海外の投稿を拝見すると、まれに発生するようです。その投稿には中途半端な状態で端末初期化すると、unlock解除コードが変わってしまうなど記載があり、根本解決策まで記載されていませんでした。

たまたまfastbootのUIツールでいじくりまわしていて解除できました。手順は以下のわうに一度relockし unlock するものでした。

このあと純正OSを起動して、”Bootlooder Unlock Allowd” を確認します。以下のように上手くいっていました。しかし通常 unlock が成功するとOS起動時に自動初期化が走るのですが、この時はそれが走らなかったです。

SO-05G と同様に OpenGapp をLinageOSと一緒にインストールしましたが、Googleアカウント追加でログイン画面のあと真っ暗になります。OSの Googelメニュー と Google Play も表示が以下のような異常になりました。カスタムROM自体はSO-05G と同じですものです。

OpenGapp は最終更新日が、’22.5月 と古くてGoogleサーバと互換がなくなってしまったようです。

LinageOS公式のGapp MindTheGapps  をインストールします。mobile Android TV がありますが、mobile: MindTheGapps-11.0.0-arm64-20230922_081122.zip を入れました。

これまでのGappは必要そうなものが一式インストールされていましたが、MindTheGapps  でインストールされるアプリは、Google(サービス)Google Play だけで、あと必要なものは Google Play からインストールしろというポリシーです。

しかしこのままだと Google Play は正常動作しません。Google 更新で Google Play は起動可能になりますが、何か操作すると落ちます。以下の追加手順が必要です。

試しに Google MAP を入れてみます。インストールできました。動作させるには端末再起動をしたほうが良いようです。

MindTheGapps をインストールしても Google Playが現れない場合、一度OSから入れ直し、先にOpenGappをインストールしてから、MindTheGapps をインストールすると上手くいく場合があるようです。他機種でも同様の傾向があるようです。

Z3 Tabletでは怪しかったGPS動作を、GPSTESTアプリにて再確認してみます。反応もよく調子いいようです。


以上、SGP771 を Android11相当にupdateし、Google Play の動作させ手順です。しかしながら自分でやるのはメンドクサイ、忙しい、自身が無い方は、弊方でセットアップをお受けいたします。Google Paly初期セットアップに手間をようするため難易度中、約1.25時間の個人様向け工数+事務費で税込4,000円~ 。ご相談、依頼はこちらから。

Dainese ライディングシューズ にシフトガードを追加する。

趣味や得意なことを事業化できれば効率的です。簡単な自動車用品を加工をできないか模索しています。


Dainese ライディングシューズは履き心地がよく、デザインも良好です。しかし最近のモデルはシフトガードがありません。(過去モデルで樹脂がことごとく四散するからかも?) シフトレバーがゴムでカバーされている車両はこれでよいですが、金属直の車両ですとちょっと痛いですし、汚れがめだってしまいます。そこでシフトガードを追加してみました。対象は夏用シューズです。

素材は ビブラム というイタリアメーカの補修用靴底の余りを厚さ5mm程度削ったものです。

接着だけでは耐えない可能性があるため、革用糸を使い特殊な技法で縫ってあります。

効果はテキメン、柔軟性もあるため歩行にも支障はないです。しかし一回目はまたまだ下手です。次に冬用にも施す予定です。

このようなカスタムサービスはいかがでしょうか? ご意見お待ちしております。