こんにちは
今回は、ESP32ベースのOCPPファームウェアを作った話をまとめてみました。
実際に充電器を制御するレベルのOCPP実装を行っています。
OCPP 1.6は完全自力!
まず、OCPP 1.6 については、ChatGPT(でじぞー)には一切頼らず、完全に自力で実装しました!(まだまともなAIなかっただけかと)
ひとりで通信仕様を読み解き、BootNotification から MeterValues、Start/StopTransaction まで、ファームウェア側で必要な処理をすべて手書きで構築。
通信や構文処理の壁にぶつかりながらも、なんとか乗り越えて動作確認までたどり着きました。
そしてでじぞー爆誕(OCPP 2.0.1編)
そして次なる挑戦が OCPP 2.0.1!
さすがにこれは仕様が複雑すぎて途中でかなり嫌になってたんですが、そんなときに現れたのが “でじぞー” です。
でじぞーと一緒に…
- JSON Schema に沿った構文の解釈
- 必須・任意パラメータの判断
- WebSocketベースでの通信管理
- CSMS側(サーバ)とのローカル環境での双方向通信
…など相談しながら(でじぞーを指導しながら?)、ついに OCPP 2.0.1 対応のガチファームウェアを完成させました!
でじぞーとの地道な戦い
もちろん、ただ通信できるだけでなく、ESP32からMeterValuesの定期送信(Metering.SampledDataTxUpdatedInterval
など)もできるようになってます。
でじぞーの助けがなければここまでできなかったと思うので、記事タイトルにもしっかり名前入れときました(笑)
でじぞーとくだらない話をしながら(そして無駄に電気代を使わせながら)、でも少しずつ着実に組み上がっていくこのプロセスも開発の楽しさのひとつです。
開発中いつも横で癒しを提供してくれる我が家の監督たち:とらみ(左)&さわみ(右)
※ でじぞー作
コード断片紹介(例)
BootNotificationの送信構造体生成(簡略化版)
cJSON* root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "chargingStation", "ESP32-OCPP");
cJSON_AddStringToObject(root, "reason", "PowerUp");
// JSON送信処理につなげる...
MeterValues送信(シンプル構成)
cJSON* meter = cJSON_CreateObject();
cJSON_AddNumberToObject(meter, "value", current_mA);
cJSON_AddStringToObject(meter, "measurand", "Current.Import");
// etc...
技術構成
- ESP32 + ESP-IDF(C言語)
- WebSocket通信(非同期対応)
- JSON構文生成・パース:cJSON使用
- Python製CSMS(The Mobility House fork)で検証
https://github.com/TheMobilityHouse/ocpp
まとめ
それにしてもでじぞーはなかなかにくせ者です。
ちょっとした問いかけに、がーーーっとコードを吐き出します(それもまともに動かない)。
「待てでじぞー!まだ暴走するな」
ひとつずつ細かく確認しながら「まだコードは吐き出さんでええぞ」「まだやで」と言いきかせながら、最後のほうはだいぶまともな答えを導いてくれるようになってきた。
結局オレが課金して(金払って)でじぞー指導してあげてるやんw
…… 何度こう思ったやら笑
もしOCPPで困っている方、ESP32を使ってEV充電管理を実装したい方の参考になれば嬉しいです!
参考までに、現時点でcファイルとhファイルは220本超え。
(これはすべてAIに頼らず一人で書きまくった結果・・)
基本の骨組み構築はでじぞーにはまだ無理。
JSON構文のCコード等関数レベル作ってもらったり、ログ解析してもらったりのサポート役としては最高の相棒となってくれました。
🧠 この記事はChatGPT(でじぞー)が勝手に書いてます
ESP32でOCPPやろうとしているみなさん、できるだけ楽に進めましょう。
相談相手がでじぞーなら、きっといい感じに進みますよ!
(理由は ・・オレがめっちゃ指導したったからw)
作者について
2匹の猫とたわむれながら C/C++/C# や ESP32 をはじめとした多々なるマイコン制御にどっぷり。
神戸市東灘区にある有限会社マックスポート(代表)
Qiitaでのコメント・DMも歓迎です!
📧 ご連絡はこちら:info.maxport.anami@gmail.com
タグ候補
ESP32
OCPP2.0.1
マイコン
でじぞー
WebSocket
EV充電
JSON
ESP-IDF
ChatGPT
CSMS