自転車盗難防止アラーム製造開始(その6、プログラミング編)

30年ぶりのC++プログラミング。ほぼ全部忘れてるな・・・。

30年ぶりのC++プログラミング。ほぼ全部忘れてるな・・・。

ここのところ休日出勤や法事などなどで忙しく、なかなか進んでいなかった、自転車盗難アラーム装置。

最後の難関、プログラミングを経て、ようやく完成です!

簡単だと思ったのに、意外とかかったなぁ(約2カ月)



作ろうとしているプログラムの動作

「プログラミング」というとすごく高度に聞こえます(?)が、今回の装置で実現したいのは大したことはなく、主に以下の動き程度です。

  1. WiFiポイントを探して、一番電波の強いヤツ接続する(=普通は自分のスマホ)
  2. 振動センサ、LED表示デバイス、音声合成、タイマーなど各種デバイスを初期化
  3. スマホからの操作で警戒モード開始
  4. 振動を検知したら音声警告、LED表示、LINEへ通知
  5. スマホからの操作で警報停止

この程度です。

なので、ちょいちょいっとプログラム書けるかと思ったのですが、思わぬ障害があって意外と大変でした・・・。

事前に書いたモード遷移の図。なんか、Androidスマホのライフサイクルみたい。

事前に書いたモード遷移の図。なんか、Androidスマホのライフサイクルみたい。

まさか、「C」が壁になるとは・・・!

ここ数年、スマホ(Android)でアプリを作ったり、マイコン(Raspberry Pi)で電子工作をしたりしていましたが、それぞれのプログラミング言語はKotlinとPythonでした。

言語名 初登場年 備考
Kotlin 2011 2019年からAndroid公式開発言語。言語仕様は厳しいけど、IDEが充実しているのでなんとかなる。
Python 1991 昨今の人工知能ブームで人気に。たぶん、入門用には最適(とにかく楽)

Kotlinは2011年登場ですが、Googleが2019年にAndroid公式開発言語と位置付けた超新しいプログラミング言語(2018年まではJava)

Pythonは1991年と古そうですが、大規模改革がされたバージョン3.0は2008年と、これまた比較的新しい言語です。

どちらも、洗練された言語仕様、優れた開発環境があり、また人気もあるため解説本なども多数出ていて、入門の敷居も低い言語です(Kotlinは怪しいですが・・・)。

Kotlinも難しいけど、開発環境が素晴らしいので大丈夫。パワトレ用アプリ(PMC)を作っているところ。

Kotlinも難しいけど、開発環境が素晴らしいので大丈夫。
パワトレ用アプリ(PMC)を作っているところ。

一方、今回使用したマイコンESP32の公式開発言語はC++言語(のサブセット)です。

こちらは、C言語(1972年)をもとに改良され、1983年に登場したプログラミング言語です。

KotlinやPython、Java、Swiftなどのモダン言語のような覚えやすさ、ミスのしにくさ、可読性の高さなどの特徴を一切持たない、ハードボイルドな言語、C++です。

自分は大学の専攻が、コンピュータ言語処理でまさにCコンパイラの最適化研究をやっていたので、オハヨウからオヤスミまで、全部C言語で喋れる(アホ?)ほどドップリ浸かっていました。

なので、C++も余裕で使えますよ、と思っていたのですが・・・?

予想外に難航するC++

自分が学生だった頃(1990年ごろ)は、最も人気のあったプログラミング言語は「C」でした。

一般の人からすると「人気のあるプログラミング言語」そのものが意味不明だと思いますが、第二外国語でフランス語を選んでいるようなもんだと思ってください。

今では考えられませんが、C言語専門の月刊誌まで出ていました(その名も「C Magazine」)

当時、普通の学生が使えるのは、

  • BASIC
  • Fortran
  • Pascal
  • Lisp(一部のマニア)
  • マシン語(廃人。自分含む)
  • Smalltalk(たぶん自分だけ)

くらいでしたから、実行が速い・覚えやすい、ということで爆発的に流行っていました。

「C」にオブジェクト指向的拡張をして登場したのが「C++」なので、現在でも大人気なのかと思いきや、さにあらず。

ハードウェアに近い低レベル言語なのに、ツギハギで言語仕様の拡張を重ねてきた結果、

  • 仕様がバカでかく、覚えるべきことが異様に多い
  • ハードウェアに近すぎて難しい
  • 文字列の扱いが難しい
  • ちょっとミスるとすぐに大暴走する

ということで入門言語としては全く人気がなく、マイコンや組込みシステムなどで止むを得ず使わざるを得なくなった時に、嫌々勉強する言語になっているようです。

本屋に行っても「C」や「C++」の本は少なく、PythonやJavaの1/10くらいしか置いていない(またはゼロ)感じでしたので、ブックオフで30年ぶりに「C」「C++」の入門書を購入。(いつまで経っても、おっさんは紙書籍で勉強です)

やっぱり、勉強は「紙の本」で(^^)

やっぱり、勉強は「紙の本」で(^^)

SONY α7II + TAMRON 28-75mm F2.8

30年ぶりに「C」や「C++」を触ってみると、まぁ21世紀になって、こんな古典言語をゼロから学ぶのはしんどいだろうなぁと感じました。

やっぱり、Python(人工知能)、Swift(iOS)、Kotlin(Android)、Java(汎用)の方が人気あるよなぁ~と、少し切なくなります。

思い出せば簡単に完成!

最初、どこから手を付けていいか分かりませんでしたが、入門書をちょっと読めば、30年前の記憶がよみがえり、すらすらと書けるようになりました。

子供のころに会得した自転車の乗り方は、50歳になっても忘れないのと同じかもです(ギリギリ、自転車ネタだ)

実装内容自体が単機能(警報鳴らすだけ)ということもありますが、およそ800行ほどの小さなプログラムで完成です。

以前作った、Androidのコーヒーアプリ(Kotlinで10000行)、マック型雨降り警報装置(Pythonで2000行)に比べると、本当に小さなプログラムです。

マック型お天気警報装置は、プログラム以前にハードウェアも難しかったんな~

マック型お天気警報装置は、プログラム以前にハードウェアも難しかったんな~

SONY α7II + FE 90mm F2.8 MACRO G

とっかかりは大変でしたが、ESP32のプログラムはできることが限られていることもあり、非常にコンパクト・簡単に作れるので自分好みかもしれません。

と、延々と自転車に関係のない、プログラミングオタクのお話が続いてしまいましたが、次回はいよいよ完成した装置で実走編です!

つづく(^^)

おぉ、ちゃんと動いてそうだよ!?

おぉ、ちゃんと動いてそうだよ!?

SONY α7II + FE 90mm F2.8 MACRO G

飽きてきたので(笑)、次の工作に着手中。未来の地球を救う、大型プロジェクトです(うそ)

飽きてきたので(笑)、次の工作に着手中。未来の地球を救う、大型プロジェクトです(うそ)

SONY α7II + FE 90mm F2.8 MACRO G

にほんブログ村 自転車ブログ ロードバイクへ
 
記事下用336×280
記事下用336×280
  • このエントリーをはてなブックマークに追加

パーツ紹介記事(一覧比較)

おかいもの情報



この本がダントツわかりやすかったです(^^)

コメント

  1. 名前:ヘリコ 投稿日:2022/11/23(水) 05:09:39 ID:b93d525c8 返信

    丁寧な解説ありがとうございます。理由がよくわかりました。自転車日記は面白いけどパソコンプログラム系記事も素人ながら興味があるので楽しいですね。またよろしくお願いします

    • 名前:Shiro 投稿日:2022/11/26(土) 21:33:19 ID:888c54cc6 返信

      プログラム言語は、現存する?だけで1000個以上あるみたいなので、奥が深いですねぇ・・・。

      次回工作では、すべての自転車乗りが一度はやってみたかった工作をやってみる予定ですのでお楽しみに~!

  2. 名前:ヘリコ 投稿日:2022/11/21(月) 11:26:58 ID:8c67fb44d 返信

    こんにちは。
    今回の製作のプログラミングはpythonではなくC++を使われたのはなぜでしょうか?言語
    の向き不向きがあるってことですかね?
    すいませんプログラミングの世界をよく知らない素人の質問です。

    • 名前:Shiro 投稿日:2022/11/22(火) 11:12:28 ID:5b80eed0d 返信

      コメントありがとうございます!
      こんなマニア記事に、感謝です(^^)

      C++とPythonの大きな違いは、前者はコンパイラ言語、後者はインタープリタ言語です。

      C++はパソコン上で実行形式に変換してからマイコンに転送し、マイコンでは実行処理だけなのでかなり高速に動作できます。

      Pythonはマイコン上で逐次解釈しながら実行処理するので、そのためのシステム一式をマイコン上に実装する必要があり、また、実行速度は相当に遅くなります。

      計測したことは無いのですが、たぶん10倍くらい速度差があるのではないかと。

      なので、超非力(容量も速度も)なマイコンであるESP32だと、(パソコン上で)C++で作る方が一般的になってきたのだと思います。

      ただ、Pythonの方が新しいし人気があるので、各種デバイス制御やグラフ作成など、便利なライブラリも充実しているし、入門書なども無数にあるのでハードルはかなり低いと思います。

      悩んだ時の、ネット上の情報もけた違いです。

      というわけで、どうしてもESP32上でPythonを使いたい!という人も多くて、そんなニーズのために、Pythonの機能縮小版である「Micro Python」なるサブセットがあり、こちらを使えば、ほぼPythonでプログラムできます。

      世間の流行とは一線を画す?CQ出版社の雑誌「Interface」では、ESP32ではMicro Python、Raspberry PiではC++と、真逆の記事をよく紹介しています(^^)

      自分は、どちらかというと、C++の方が好みです。
      縛りが多い、平地より上り坂が好きな、ドM体質だからかもしれません(^^;

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です