方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)

開発・デザイン

サーバー(Go)

【Go】nullを許容するDBカラムに対するdate型の値の扱い

nullを許容するDBカラムに対するdate型の値を、golangで処理する場合の方法を3つ紹介。ポインタでnullを許可する。sql.NullTimeを使う場合は、nullを判定するために、Validフィールドを介して条件分岐が必要。[]uint8 を使う場合は、バイトスライス→文字列→time.Timeオブジェクトと変換する
サーバー(Go)

【Go×FCM】定期的にFCMへPush通知を送信する機能を実装:サーバー編

Go言語でサーバーから定期時刻にFCMにPush通知を送信する機能を実装する。FCMにPush通知を実装するのに必要な引数は下記4つ:OAuth 2.0 トークン(HTTPリクエストヘッダーのAuthorization)・デバイスのFCMトークン・タイトル・本文
組み込み(C++ / ESP32)

【ESP32】ハードウェアトリガーでファームウェアを初期化する方法

ESP32でTTP223タッチセンサーによるハードウェアトリガーを用いたファームウェア初期化の手順を記載。PlatformIOとTFT_eSPIを活用して、セーフモードでのディスプレイを利用した状態表示やOTAアップデートの実行方法について記載。
アプリ(Flutter)

【Flutter × Go × gRPC】アプリ強制アップデート機能の実装(画面ロック)

「Flutter Firebase アプリアップデート」で検索すると、RemoteConfigを使った方法と、FirebaseDetabaseを使った方法の大きく2種類がヒットした。ただし、今回は、Flutter×Go×gRPCを使って自前で強制アップデート機能を実装する。
サーバー(Go)

【Protobuf】Varintエンコーディングの仕組みとフィールド番号の重要性

プロトコルバッファ(Protocol Buffers、protobuf)は、構造化データのシリアライズ形式で、Googleによって開発された。protobufは、XMLやJSONよりも効率的にデータをシリアライズし、小さいメッセージサイズと高速なパーシングを実現する。
AI

【ChatGPT】をプログラミングで活用する際に注意すべきこと

「【ChatGPT】に与える良いプロンプトとは。良い結果を得るための6つの戦術」の記事でも記載したが、やはり最初が肝心で「明確で具体的な指示を書く」ことが最重要と感じる。あと、API関連は公式ドキュメントを見て、usageを確認した方が早い。
組み込み(C++ / ESP32)

【ESP32 × PlatformIO】設定ファイル(AWS IoT)をLittleFSからNVS領域に移動

現状、設定ファイルをdata配下に置きビルド時はSPIFFS領域に含まれているが、ダウンロードの処理の不具合などでLittleFSのストレージが溢れた際、証明書の読み込みなど失敗する可能性があるので、NVS領域への書き込みと読み取りに変更する。
組み込み(C++ / ESP32)

【ESP32】ESP-IDFへの移行後に発生したMQTT通信後のスタックオーバーフローエラー対処法

スタックオーバーフローは、タスクが割り当てられたスタックメモリを使い果たしてしまう現象。MQTTメッセージの受信処理やパース処理が原因でスタックオーバーフローが発生することがある。sdkconfigファイルでスタックサイズの設定変更することで解決できることがある。
組み込み(C++ / ESP32)

【ESP32 × PlatformIO】フレームワークをArduinoとESP-IDFで併存する方法

PlatformIOでArduinoとESP-IDFのフレームワークを併用することができる。platform.iniにframework = arduino, espidf と設定することで既存の多くのArduinoライブラリを直接利用できるため、コードのポーティングや書き直しの手間を省くことができる。
組み込み(C++ / ESP32)

【ESP32】NVS暗号化キーを作成してNVSパーティションを暗号化

ESP32のNVS暗号化機能を利用するために必要な暗号化キーを保存するための専用パーティションとして、新たにNVSキーパーティションを作成する。NVSキーパーティションとして、Typeはdata, Subtypeはnvs_keysを指定する必要がある。