2021年3月28日日曜日

CAN送受信OK...M5stack+M5StickC plus

今回は

前回M5stackとMCP2562というCAN トランシーバーを使って送受信試験をしましたが、うんともすんとも言わずで終わりました。デジタルオシロ等あれば、確認できるのですが持ち合わせていません。出来合いのモジュールがあることがわかり、それらを使って送受信の確認をしてみます。

M5stack commとM5stickC+CAN moduleで送受信

M5stickC Plusの準備

CAN moduleを購入し、GROVEコネクタにて接続します。GROVEコネクタの実態はI2C接続です。M5stickC Plus側は、GND,5V,SDA,SCLの4線です。このコネクターは、HY2.0-4Pという規格だそうです。名前のとおりピンのピッチが2mmとちょいと狭いです。汎用のコネクタは、はまりません。メス配線コネクターも市販のものは大抵2.54mmなので、この2mmピッチのコネクターが必要です。配線には専用ケーブルを用意するか、手持ち組み合わせて工夫が必要です。0.54mmなんとかなるかと思いましたが、なりませんでした。

CANモジュールはGROVEケーブルを介して外付けなのでちょいとでかくて、M5StickCと同じくらいの大きさです。モジュールの先端は内部と電気的に分離されてCAN BUSになっておりGND、CAN_H、CAN_Lを接続します。

ソフトウェアは、参考が多いArduinoにします。参考リンクのソースそのままで送信プログラムは動きました。ボタンAとBを押せば、それぞれ異なるメッセージがID 0x0でCAN BUSに送信されます。

M5stack+commu moduleの準備

M5stackにスタックできるcommuモジュールを購入しました。これは、esp32とSPI接続してそれぞれのドライバーにつながっていて、以下のインターフェースが入出力できます。

  • I2C x 2
  • CAN × 1
  • RS485 × 1
  • TTL × 1

モジュールを本体の底にガチャっと差すだけでOKです。配線間違いの可能性を低減できます。本体とドッキングしたときの側面4方向です。バッテリーモジュールも接続してます。これで、150mA→750mAに容量が上がります。

ソフトウェアはサンプルコードが各種提供されているの、それを参考に作成します。ほぼそのままですが。

CAN送受信試験

送信機と受信機ができたので、送受信できるか確認します。CAN_H、CAN_L、GNDをそれぞれ接続して、CAN_HとCAN_Lの間に120Ωの抵抗を終端として入れます。全体の接続は以下のとおりです。

全体構成とそれぞれの部位は、以下のとおりの構成です。

配線の長さが短いので配線は撚らなくても(twist pairにしなくても)大丈夫です。

送信機は、以下のとおりAとB2種類のメッセージを送信します。

受信機は、2種類の8バイトメッセージを受信してます。

送信機からCAN ID 0x0 にAとBを加えて異なるメッセージを送信すると、受信機側でそれぞれ受信していることが確認できました。

CAN送信機のトランシーバーをMCP2562に変更

送受信確認できたので、以前うんともすんとも言わなかったトランシーバーに変更してみます。再度データーシートを見直すとVDDとVIOが内部で繋がっていないことがわかりました。MCP2561は繋がっているようです。よく確認が必要です。VIOへ配線を追加して、トランシーバーを変更して送受信すると、問題なく送受信確認できました。

一式ちゃんと動くセットがあると、デバッグしやすいです。デジタルオシロ買わずになんとかここまで進んだ感じです。オシロがあればもう少し早くここまでたどり着いたかもです。引き続き購入は検討します。

今日のまとめ

M5stack+commuモジュールとM5StickC+CANモジュールを使ってCAN送受信の確認ができました。また、以前動かなかったmcp2562トランシーバも動作確認ができました。

更にCANメッセージの内容を確認してソフトウェアを改良しつつ、バイクからデータを吸い出せるように引き続き検討したいと思います。

参考リンク

M5StickC PlusでCAN通信 - Embedded &oT

M5Stack Commuモジュール - スイッチサイエンス

2021年3月20日土曜日

VScode+docker拡張機能がいけてる

VScodeとdockerのマリアージュ

VScodeのdocker拡張機能がMicrosoftから配布されており、VScode上でdockerコンテナの管理がいい感じです。今回試したのは以下の図のとおりの接続イメージです。Win10上のVScodeからPi4bにsshで接続します。pi4b上のdocker-compose.ymlをup,downしたり、簡単にbash attachすることができます。

同様にコンテナコントロールは、ローカルでもリモートでもOKです。Win10で動いているWSL2上のdockerも管理できます。kubenetesを使うと、もっとまとめて管理ができるのかもです。今後試してみたいと思います。armとIntelが混在すると面倒かもしれません。

VScodeの画面はこのような

pi4bでは、dockerとdocker-composeが動いているという前提です。どちらもapt-get installにて簡単にインストールできます。docker-composeで使用するymlファイルを選んで右クリック「up」すると、ymlの設定に沿ってコンテナが立ち上がります。

dockerコンテナの稼働状況は左エリアにそれぞれ表示されます。

左エリアのコンテナを右クリックすると、それぞれのコンテナが吐き出すログ見たりshell attachやinspectで動作状況の表示などかゆいところに手が届きます。

まとめ

docker初心者ですがVScodeとdockerのマリアージュはすばらしいです。ローカルもリモートも同じ環境で管理できるのはよいです。環境は出来たので、dockerの使い方や設定ファイルの書き方を更に勉強していきたいと思います。

2021年3月13日土曜日

M5stackにM5stickC plusな話題

M5stackとは

2017年に中国深圳にてJimmy Laiさんが資金調達して生産し始めた製品です。マイコンにespressif社のesp32を使用して5x5cmのケースにセンサーやLCD、プッシュボタンをレイアウトしたIoTのベースキットのようなものです。ソフトウェアはarduinoやmicropythonで開発が可能であり、サンプルも充実してます。ちょっとした試作やお勉強にはぴったりな製品です。日本でもSwitch Science社が取り扱っており、Amazonでも購入することが可能です。

写真は右がM5stickC plus、左がM5stack greyです。

今の取り組み

とりあえずはサンプルコードを動かしながら各種機能を確認してます。以前9軸センサーの表示を書きましたが、CAN送受信機、傾斜計、センサー送信機等並行して進めています。Arduinoは先人が多くサンプルコードも機能ごとにたくさ‘んアップされています。

大きく分けて3種類

M5シリーズは大きく分けて3種類あります。定番はM5stackシリーズ、ちょいと小型のM5stickシリーズ、更に小型のATOMシリーズです。それぞれには、バッテリーの大きさやセンサーや液晶の違いで数種類バリエーションがあります。どれもマイコンはesp32なので開発は同じ環境で可能です。

開発環境はVScodeでしょ

堅実な開発環境は、ArduinoIDEです。ライブラリーの追加等は非常にやり易いし、サンプルを読み込むのも簡単です。エディターがベタな感じでいけてないのが難点です。

流行りはVScodeに拡張機能PlathomeIOを使った環境ですが、ちょいと製品発表とはリンクせずワンテンポ遅れます。この前発売された500円マイコンボードのPi picoも無理やり使うことができますが、ラインアップにはまだ入ってません。今回購入したM5stickC plusもボードの選択肢にはまだ入っておらず、似ているM5stickCを選ぶとTFT画面がきちんと表示されません。

M5stickCとM5stickC plusは、ちょいと違います

購入したのはM5stickC plusです。M5stickCとの違いは、TFT画面が気持ち大きいのと、リポバッテリー容量が気持ち大きい点です。

M5stickC

0.96インチ 80×160 TFT (ST7735S)

80 mAh LiPoバッテリー

M5stickC Plus

1.14 インチ 135x 240 LCD (ST7789v2)

120mAh バッテリー内蔵

バッテリー容量は、ほんと気持ち程度です。TFTは大きさも違うしドライバーも違うので、M5stickCのバイナリーをM5stickC Plusに書き込むと表示は出来ますが、こんな感じで悲しくなります。TFT_clockのサンプルコードを書き込んだ例です。M5stickC.hを読んでバイナリーを作成するとこうなります。

M5stickCPlus.hを読み込むと以下のようにちゃんと表示されます。

VScode+PlathomeIOでは、まだライブラリーが整理されてません。読み込むヘッダーファイルを以下のように区別すれば、make出来るのと出来ないのがありますがそれなりに実行ファイルを作ってくれます。

#include <M5StickC.h>
#include <M5StickCPlus.h>

時間が経てば整理されてくると思います。ArduinoIDEを使えば問題はありません。

今日のまとめ

M5シリーズのざっくりまとめと、M5stickCとPlusの違いについてまとめました。VScode+PlathomeIOでは、M5stickC plusのライブラリーが追い付いていません。もう少し時間がかかるようです。

2021年2月27日土曜日

esp32+mcp2562 CAN送受信機...その1

ハード的な準備

esp32とCANトランシーバーが必要です。トランシーバーは、3.3V駆動、5V駆動等数種類あります。今回使ったのは、5V駆動のMCP2562です。配線等は、こちらのページを参考にしました。

MCP2562を使った電子工作- 人気IoTマイコン【ESP32】 | Tommy blog

データーシートはこちらです。

ピン番号勘違いするといけないので、kicadを使って回路図にしました。

基板を作るわけではないので回路図だけです。しばらく使わないうちに5.15から5.1.9にバージョンアップしてました。esp32はシルクプリントがあるのでそこに配線します。ただし、シルクプリントの文字は小さいです。

ブレッドボードに差し込んで配線しました。こんな感じです。

送信を緑線、受信を白線にしました。左上がCAN_HとCAN_Lの配線となります。

ソフトウェア

VScodeを使って、arduinoをプラットフォームとして環境を構築します。

esspressifから提供のCANサンプルを活用します。GPIOは、送信がGPIO5、受信がGPIO4です。arduinoのソースは、以下のとおりです。

ソース 

(GISTは、埋め込み出来なくなりました)

バイナリーの作成と書き込み

VScode+PlatformIOでバイナリーを作成します。特にエラーもなく問題なくバイナリーは作成できました。書き込みも問題なしです。

リセットしてシリアルモニターすると、プログラムは動いている感じです。

今後の予定

CAN送受信機は出来たのですが、問題ないのか機能確認をするすべがありません。いきなり、車やバイクに接続するのも怖いので何らかの手法を考えたいと思います。オシロがあればいいのですが、テスターしか手元にはありません。中華製探すと3-5万円程度でそれなりのが出ております。買うかどうかはちょっと考えます。

今日のまとめ

マイコンesp32とCANトランシーバーmcp2562を使って、CAN送受信機を作りました。ソフトウェアは動いている感じですが、CANデーターの送受信を確認する手段がありません。考えながら少しずつ進めたいと思います。

ラズパイ日記から移行します

大変申し訳ありません

これまでたくさんのコメントやリンクを張っていただいた方、大変申し訳ありません。

テンプレートをいじったら、元に戻らなくなりました。新たなページとしてドメインを変更しました。引き続きよろしくお願いします。

【旧】ラズパイ日記 http://labo-kajisaki.blogspot.jp こちら

【新】組込み一歩のはまりから  http://h-kaji.blogspot.jp こちら


2021年2月20日土曜日

pi pico...まずはLチカ

 

Pi picoを早速購入しました。まずは、基本のLチカから。Lチカだけでは終わらず、勢い余ってI2C接続OLEDの表示まで確認できました。

準備

Pi picoは、基板だけで足が付いていません。試験等をするのはブレッドボードなのでピンヘッダーをつけないといけません。片側20ピンです。ブレッドボードに差してから半田付けすると動かなくて作業しやすいです。

長い足を付けておくと、上からメスコネクタの配線が出来るので便利になるかもしれません。

足を半田付けして、ブレッドボードに差しておけば準備完了です。

ソフトウェア

オンボードLEDを点滅させるバイナリーが公開されています。ここから、取ってきて読み込ませればいいです。読み込ませるのは、専用シリアルプログラムは必要なく、USBケーブルで接続するとストレージに見えるbootプログラムが書き込まれており、そこへバイナリーをコピーすれば自動的にリセットがかかって、実行してくれます。

開発環境

専用開発環境のSDKがまとまっています。無理やりVScodeでも開発できますが、拡張機能のplatformIOにはまだpi picoは準備できていません。間もなくarduinoでも開発できるようです。

今回は、こちらを参考にwin10上のWSL2で起動可能なdebian上にSDKを展開したいと思います。

Raspberry Pi Pico を WSL からあつかう - Qiita

cmakeは、新しいのものに入れ替えないといけないようです。

Download | CMake

CMakeのインストール方法 - jskangarooのブログ

このCmakeってのが、最近はやりなのかちょっと前からなのよく見ます。今一つ使い方と設定の書き方がよくわかりませんが、srcとバイナリを違うディレクトリで管理できるのでスッキリはします。

すべてのサンプルコードは、u2fファイルになりましたので、試したいu2fファイルをPi picoに放り込んでいけばリセットかかって動きます。

オンボードLEDのblinkやGPIOに接続したLEDとの交互点滅や、オンボードLEDのPWM制御も簡単に切り替えることができます。

 

micropythonはどうよ

お手軽お試しには、C/C++よりはハードル低いはずです。こちらから、micropythonのu2fファイルを取ってきて、放り込めばPi picoに自動的にリセットがかかってmicropythonは動きます。

お好きなシリアル端末でUSB経由のCOMポートをたたけばmicropythonのコマンドプロンプトが表示されます。

Ctrl-Dでソフトリセットがかかります。

>>>
MPY: soft reboot
MicroPython v1.14 on 2021-02-05; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>>

VScodeではpico-GOという拡張機能があり、同様にシリアル接続が可能です。VScodeで書いたものを、Pi picoへ送信してくれるので標準IDEのような感じになります。

お試しで、I2C接続したOLEDに文字を書いてみましょう。

試行錯誤した結果、以下の3つのファイルを作成しました。

boot.py
main.py
ssd1306.py

pico-GOからuploadすると、最初はエラーが出ますが、何度かやってると書き込まれるようです。

Ctrl-DにてSW restすると自動的に起動するようになります。

>>>
MPY: soft reboot
boot start..
I2C Address      : 0X3C
I2C Configuration: I2C(0, freq=200000, scl=5, sda=4)

無事OLEDにも表示されました。それぞれのファイルの内容は、ページ最下部に貼っておきます。なんかまだ違っているような気もします。OLEDは、ちゃんと表示できてます。


今日のまとめ

pi picoのC/C++開発環境をWin10のWSL2(debian)に構築して、サンプルバイナリーを作成し実行できることを確認しました。micropythonは、VScode+pico-GO拡張機能を使って、OLEDの表示を確認しました。C/C++は、ちょっと独自な記述が必要な感じです。arduinoも対応できるようになれば過去の成果が活用できます。micropythonは、母艦環境の構築がすべてですね。標準IDEがいいのでしょうけど、マイコンごとに使い方が異なるのがよくないです。

参考サンプルコード等

とりあえず、ベタっと張っておきます。Githubの使い方もそのうちマスターします。

boot.py

  print("boot start..")
  import main
  import ssd1306

boot.py

# Display Image & text on I2C driven ssd1306 OLED display 
from machine import Pin, I2C
from micropython import const
from ssd1306 import SSD1306_I2C
import framebuf
import utime

WIDTH  = 128                                            # oled display width
HEIGHT = 64                                            # oled display height

i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000)       # Init I2C using pins GP8 & GP9 (default I2C0 pins)
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config

oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # Init oled display

# Raspberry Pi logo as 32x32 bytearray
buffer = bytearray(b"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00|?\\x00\\x01\\x86@\\x80\\x01\\x01\\x80\\x80\\x01\\x11\\x88\\x80\\x01\\x05\\xa0\\x80\\x00\\x83\\xc1\\x00\\x00C\\xe3\\x00\\x00~\\xfc\\x00\\x00L'\\x00\\x00\\x9c\\x11\\x00\\x00\\xbf\\xfd\\x00\\x00\\xe1\\x87\\x00\\x01\\xc1\\x83\\x80\\x02A\\x82@\\x02A\\x82@\\x02\\xc1\\xc2@\\x02\\xf6>\\xc0\\x01\\xfc=\\x80\\x01\\x18\\x18\\x80\\x01\\x88\\x10\\x80\\x00\\x8c!\\x00\\x00\\x87\\xf1\\x00\\x00\\x7f\\xf6\\x00\\x008\\x1c\\x00\\x00\\x0c \\x00\\x00\\x03\\xc0\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00")

# Load the raspberry pi logo into the framebuffer (the image is 32x32)
fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB)

while True:
    # Clear the oled display in case it has junk on it.
    oled.fill(0)

    # Blit the image from the framebuffer to the oled display
    oled.blit(fb, 96, 0)

    # Add some text
    oled.text("PI pico",5,8)
    oled.text("SSD1306 test",10,30)
    oled.text("Kaji tech",28,50)

    # Finally update the oled display so the image & text is displayed
    oled.show()
    utime.sleep(1)
    oled.fill(0)
    utime.sleep(5)

ssd1306.py

micropython/micropython

ページ引っ越しました

このページは、以下に引っ越しました。内容も逐次移行中です。引き続きよろしくお願いします。  https://hkaji.github.io →こちら