ESP32でCAN通信をする
ここ5年くらいMaker界隈を賑わせているマイコンESP32ですが,内部にSJA1000というCANコントローラを持っており,CANトランシーバーICを外付けしてあげることでCAN通信ができることを知りました.
そこで今回は,ESP32にMCP2562というCANトランシーバーICを外付けしてCANの信号を吐かせ,ロジアナとオシロで確認するところまでやってみました.
CANとは
Controller Area Networkの略で,車載用途によく使われていらしい.差動信号で通信させるためノイズに強く,信頼性が高いらしい.
細かい仕様は他サイトに譲ります.
ESP32とMCP2562の配線
ESP32とMCP2562は下図の用に配線しました.
この図には描かれていませんが,実際にはノイズ低減用のパスコンを5V・3.3VとGNDの間に入れました.
実際にブレッドボード上に配線したものが下図になります.
プログラム
今回,ESP32に書き込むファームウェアはArduinoで開発しました.
Arduinoには標準でCANのライブラリが用意されていないため,自分で導入する必要があります.
今回はこちらのライブラリを用いました.
github.com
このライブラリのexamples内にあるCANSender.inoをベースに,以下のプログラムを作成しました.
これをESP32に書き込み,実行しました.
デコードしてみた
せっかくなので,どのような通信が行われているのかをオシロで見てみることにしました.
おおー、差動になっとる。 pic.twitter.com/qx2AW1w4ET
— しろいし🔔 (@siroyanTech) 2021年1月27日
これはCAN_HとCAN_Lの波形を見ています.きちんと差動信号になっていますね.
こちらのオシロには,CANのデコード機能がついていないため,実際に通信の内容を見ることはできません.
そこで,こちらのロジアナとSigrokというオープンソースのソフトウェアを使って見てみることにしました.実際に取得した波形がこちらです.
上が実際の波形で,下がその波形を基にCANをデコードしたものになります.
「HELLO」の文字列がASCIIコードになって送信されていることが分かりました.やったー!
最後に
今回は,ESP32とMCP2562というCANトランシーバーを使ってCAN通信をさせ,実際に通信内容をデコードすることができました.
ESP32はこの他にも様々な機能が存在します.300円のマイコンなのに恐るべし.
「点棒オンライン」というWEBサービスを開発したよ(その2)
前回記事
siroyantech.hatenablog.com
の続きになります。AWSサイドとクライアントサイドをもう少し詳しく説明していきます。
API設計について
前回の記事を読まれた方はわかると思いますが、この点棒オンライン(というよりサーバーレスアーキテクチャ全般?)では、静的コンテンツをS3から配信し、その他動的コンテンツをAPIとして提供する形をとっています。
このあたりの設計は、RoRからWEBアプリ開発に入った自分としては驚きでした。
API Gatewayによって提供されるAPIは、その背後でLambdaを呼び出し、メインの処理をしています。表にまとめると下の様になります。
では、次にこのAPIから呼び出されるLambda関数たちが何をやっているかを説明します。
Lambda関数
generateTaku()
こちらはその名の通り、卓の生成を担っています。
この関数が呼び出されると、卓のUUIDと4人分の点棒の情報をもつレコードをDynamoDBに登録します。
getTakuInfo()
これもその名の通り、卓の情報を返します。
この関数が呼び出されると、パスパラメータで渡ってきた卓のIDをもとに、DynamoDBから4人分の点棒の情報をクライアントに返します。
switchTaku()
こちらは点棒の受け渡しを担っています。
この関数が呼び出されると、クエリパラメータをもとに、誰が誰に点棒を渡すのか、渡す点棒な何点なのかを特定します。
そしてパスパラメータをもとに、どの卓の話をしているのかを特定し、DynamoDBのレコードを書き換えます。
4人のユーザーが同卓するには
つまるところ、4人のクライアント間で、generateTaku()されたときの卓IDを共有できればよいわけです。
これにはQRコードを用いました。QRコードに卓ID情報を埋め込み、generateTaku()を呼び出した人以外は、呼び出した人の画面に表示されているQRコードを読み取り、そこから卓IDを取得する、というわけです。
その他
見た目にはBootstrapを使いました。(見る人が見れば一発でわかりますが(笑))
Bootstrap、とっても便利で重宝してます。
終わりに
ここまでお読み頂きありがとうございます。
また何か作りましたら記事にしたいと思っていますので、よろしくお願いいたします。
「点棒オンライン」というWEBサービスを開発したよ(その1)
Abstract
点棒オンライン https://tenbo-online.net/ というサービスを開発しました。
AWSを使ったサーバーレスアプリです。
サーバーレスアーキテクチャやREST APIについての理解が深まりました。
はじめに
この記事は、お酒を飲みつつ、別画面でF1の試合を見ながら執筆しています!
適当なことや間違ったことが書かれているかもしれません!
サービスの概要
そもそもどんなことができるアプリかを簡単に説明しますと、麻雀の点棒のやり取りをオンラインでできるようにしたアプリになります。
つまり、4人の点数情報を、それぞれのブラウザに表示させる必要があるわけです。
どうやって実現したのか、まずは、サービスの全体図をお見せしたいと思います。
恐らく、そんな突飛な構成では無いかと思います。
卓の情報をDynamoDBに保存し、それを適宜更新/取得する、といった構成です。
プログラムなどは全部ここに置いてあります。興味の有る方は見て頂けると嬉しいです。
AWSについてどうやって勉強したか
AWSを使うのは初めてだったのですが、まず、こちらの記事
を参考に勉強し始めました。Twitterで話題になっていたやつですね。
非常に分かりやすく、導入に丁度よいと思います。東大の授業資料のようですが、こんなに実践的な事まで教えてくれるのは意外でした。自分の大学ももう少し頑張って欲しいところです(笑).
その後は、AWS公式のハンズオンを用いて勉強しました。
こちらは、個人情報を少々入力しなければいけない点が少し不便ですが、それ以外は完璧です。さすがAWS公式とだけあって、非常に質が高いです。動画資料となっており、AWSコンソールの操作方法などがとてもわかり易く、動画一本あたりの時間も10分程度となっており、とても見やすかったです。
「メカ屋のための脳科学入門」がめちゃめちゃ良かった
はじめに
どうも、siroyanです。
以前から気になっていた本「メカ屋のための脳科学入門」を読みましたので、レビューしたいと思います。
結論から言いますと、
- 分かりやすい
- 前提知識なしでも問題ない
- 筆者のコラムが面白い
です。これで2400円はかなり安いと感じました。
では、具体的にどう分かりやすかったのか、章ごとに見ていきたいと思います。
第1編 イントロダクション
ここのテーマは、どうやって外からの刺激を電気信号に直しているかと、それを脳はどのように受け取っているかです。
イオンチャネルやそこでのイオンのやり取りについての原理的な話から、人工内耳などの応用例が紹介されています。
また、そのようにして取り入れた外部情報を脳は重要視しておらず、大半は過去の経験からくる内部情報によって補完している、という説明が、実験事実と併せて紹介されています。
第2編 神経細胞
第一編でのイオンチャネルやそこでの化学反応についての詳しい説明があります。とはいっても、高校化学の知識があれば理解できるレベルに落とし込まれています。
細胞の興奮と抑制がどのように変化するのか、発火とは何かについて説明があります。
第3編 運動
ここでのテーマは、脳からの指令がどのようにして筋肉に伝わるのか、です。この章は多少生物学的といいますか、生理学的な内容が多めです。それゆえ、多少読むのに苦労しましたが、それでもしっかりと読めば理解できました。ちなみに、この章を読むと、神経を労わろうという気持ちになります笑。
第4編 知覚
ここでのテーマは、脳の視覚,聴覚の理解です。分散処理でそれらを処理していること、冗長性があること、などをこれも実験事実とともに紹介されています。僕は、この章が一番読みごたえがあり、面白かったと思います。
第5編 芸術
ここでのテーマは、芸術です。そのままですが笑。人が何を美しいと思うのか、どういう音楽が人間の脳に刺激を与えるのか、などが、説明されています。読み物としての面白さがありました。
おわりに
全編通して非常に興味深く、また驚きを与えてくれる本でした。続編も出ているので早く読みたいです。
読書メモ(脳科学とSF)
はじめに(この記事の要約)
自分の専攻は脳科学です。
研究室での課題図書を読んだら、面白かったです。
読書っていいですね。
認知脳科学の本を読んだよ
普段、ソフト開発4割, エレキ開発4割, メカ開発2割の僕ですが、大学の学科は応用物理学科で、研究テーマは認知脳科学(特に視覚)です。
なんともちぐはぐな感じですが、自分の好きなことをそれぞれ押し進めていったら、いつしかこんな感じになってしまいました。
話は変わりまして、先日、研究室のボスから課題図書として課された本を読みました。
前置きしておきますが、この本、非常におすすめです。
基本的な脳活動(五感に対する処理や運動,記憶について)などが、どの脳部位で処理されているのか、また、それがどのような意味を持つのか、ということを実験事実を踏まえて分かりやすく解説してくれています。
また、著者の方が工学部出身の方だからでしょうか、工学的なワードや例を用いながら説明してくれる点も、理解の一助となりました。
1,2章で脳について、用語の定義や基本事項を説明してくださるので、殆ど初学の僕でも理解することが出来ました。
また、最後の付録として、神経細胞の動きを化学反応レベルで解説してくださっており、とても興味深く、非常に助かりました。
脳について興味がある方で、これから勉強したい、という方にはぜひおすすめです。(少々値がはり、その割には薄く感じるかもしれませんが、内容は密に詰まっています)
次は、
この2冊を読んでみたいと思います。
読書っていいね
最近、例のウイルスのせいで家でじっとしていることが多く、積んであった本を読んでいます。最近読んだ本はこれです。
最近、各所で取り沙汰されているこちらの本ですが、個人的には結構楽しめました。
元々、SF作品は壮大な世界観で、規模の大きい話が好きなので、短編集であるこちらは、あまり好みでないかなぁと思っていたのですが、ただの杞憂に終わりました。
むしろ、短編であることで、テンポよく、飽きずに読み終えることができ、満足度は高かったです。
この記事を読んでいる方、ぜひご一読ください。(といっても、アナリティクスを見る限り、来訪者は1日2~3人ですが...)
次に読む予定のSFはこちらです。
まあ、有名ですよね笑。こちら、ハードカバーになるのですが、読むと物理的に疲れるので、気合い入れて読もうと思います。
では、この辺で。
IMBLEを使ってみたよ(スマホからLEDのON/OFF制御するまで)
はじめに
以前から気になっていたIMBLEというモジュールを購入し、少し遊んでみたので、記事にしたいと思います。
IMBLEとは、interplan社が開発したBLEモジュールで、秋月電子や千石電商などの電子部品屋で簡単に手に入ります。
開発元のinterplan社は日本企業であり、データシートやマニュアル等が全て日本語で用意されているため、非常にありがたいです。
シリアル通信で簡単にデータを送受信・制御できるBluetooth Low Energyモジュールで、Bluetooth Low Energyを意識せず、知識不要でBLE機器が実現できます。
もちろん低消費電力でコンパクトサイズ、しかも手軽に実装できるコネクタタイプです。
実験環境
使用したマイコンボードはNucleo-L053R8で、PlatformIOでソフトの開発をしました。
この記事では上記のNucleoボードを使用していますが、Arduinoなど、PlatformIOが対応しているボードであれば、同様に開発できると思います。
BLE通信する端末はAndroidスマートフォンを用い、GooglePlayで「IMBLE」と調べるとinterplan社公式のアプリがあるので、通信にはそれを使用しました。
プログラム
gistf7826a1c51414de94ef8bf1ac9e85c86
プログラムの解説
行っていることとしては、スマホから「01」と送信するとLEDが点灯し、「02」と送信するとLEDが消灯する、というごく単純なものになります。
通常のSerialはPCとNucleoボードの通信用で、imbleSerialはIMBLEとNucleoボードの通信用のものになります。
IMBLEは「01」という文字列を受信すると、マイコンボードに受信データの「01」に加え先頭に「00,0000,00:」が入ります。*2
ですので、実際に必要な受信データだけを切り出す必要があります。そのため、16,17,20行目で、:(コロン)をキーとして受信データを切り取っています。
後は、その受信データが「01」なのか「02」なのかでHIGHとLOWを切り替えているだけです。
終わりに
ぶっちゃけ記事にするほどでも無いかな...とも思いましたが、あまりIMBLEに関する情報が出ておらず、また個人的にinterplan社の無線モジュールが好きなので、記事にしました。せっかくの日本製の無線モジュールですし、皆さん使ってあげてくださいね。
どうでもいいつぶやき
普段、秋月で10円単位の買い物をしているせいで、3000円近くするIMBLEを買うのは結構気合が入りました。