30年ぶりのC++プログラミング。ほぼ全部忘れてるな・・・。
ここのところ休日出勤や法事などなどで忙しく、なかなか進んでいなかった、自転車盗難アラーム装置。
最後の難関、プログラミングを経て、ようやく完成です!
簡単だと思ったのに、意外とかかったなぁ(約2カ月)
作ろうとしているプログラムの動作
「プログラミング」というとすごく高度に聞こえます(?)が、今回の装置で実現したいのは大したことはなく、主に以下の動き程度です。
- WiFiポイントを探して、一番電波の強いヤツ接続する(=普通は自分のスマホ)
- 振動センサ、LED表示デバイス、音声合成、タイマーなど各種デバイスを初期化
- スマホからの操作で警戒モード開始
- 振動を検知したら音声警告、LED表示、LINEへ通知
- スマホからの操作で警報停止
この程度です。
なので、ちょいちょいっとプログラム書けるかと思ったのですが、思わぬ障害があって意外と大変でした・・・。
事前に書いたモード遷移の図。なんか、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)を作っているところ。
一方、今回使用したマイコン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
丁寧な解説ありがとうございます。理由がよくわかりました。自転車日記は面白いけどパソコンプログラム系記事も素人ながら興味があるので楽しいですね。またよろしくお願いします