macsbug

Bugs and measures for M5Stack ATOM

leave a comment »

M5Stack ATOM の不具合と対策                2021.10.10
M5Stack ATOM CH552T (M5A1 0120) の VCCについて

ATOMの不具合:
BLE / WiFiの送信出力が弱い。WiFiの接続が安定しない。
再起動する。電源が落ちる症状。

結論:ATOM CH552T VCCの 5V接続は 設計ミスである。
理由:CH552Tの VCCは 3.3Vで使用可能である。
対策:ATOM CH552T (USB 2 UART & Auto Download) の VCCは 3.3Vにする。

ATOMには ATOM Matrix と ATOM Lite と ATOM ECHOがあります。
MPUは ESP32-PICO-D4 を搭載しています。
ATOMは小形でデザインよく 何かチョット作る時に便利でしょう。
ケースは サイズが小さく 3Dプリンターで作り安く、費用も低価格で済むでしょう。
ATOMは 所有していませんので、ネットの情報をまとめました。
よって、情報や分析不足、現物確認の未実地により判断不足があるかもしれません。


.
根拠:
1. CH552の電源 VCC は 3.3V〜5V 仕様である。
_  根拠:USB機能付き格安マイコンCH552Tの入手方法と回路について: 2019-03-30
_     動作電圧:3.3V~5V
_  根拠:CH552 DATA SHEET:5Vから3.3VのLDOを内蔵。

2. ATOM は USB 2 UART & Auto Download (CH552T VCC) に 5Vを使用しています。
_  根拠:ATOM Lite SKU:C008 Document
_  根拠:そーたメイ氏:2021.03.04
_  🔴 M5ATOM Lite, MatrixのWifiが不安定のため原因を調査。感謝致します。
_  🔴 ESP32と5V IOのUSB UARTデバイスによるWifi問題まとめ:2021.10.07
_  実測:CH552_Pin5 ( 4.3V ) -> 2.7KΩ -> ESP32GPIO_0 ( 3.9V:動作保証外 )
_  確認:GPIO_0=4V以上の時 発生しGPIO_0=3.3Vにすると発生しない。
_  対策:ATOMへの電源供給を5V->3.3Vにする。
_     1. 裏面ヘッダピンかの3.3vから3.3V供給。
_     2. GROVE VCC から3.3V供給。

_  根拠:佐々木氏:CH552_pin5( TXD1:5V ):実測 4.22V
_  対策:TXD1(5) -> 3.3V 1KΩ PULL-UP ( 3.59V )-> ESP32GPIO_0
_  M5StickCPlus も該当のピンは4.0V くらいありました。
_  実測と対応策に感謝致します。

_  根拠:井田 健太氏:CH522Tの電源が5Vである限り。
_  CH552TのIOが5Vを出したときに、ESP32の入力のハイサイド側の保護ダイオードから
_  ESP32のVddに電流が流れてESP32Vddの電圧が変動するのが問題ですので、
_  ESP32とCH552Tの電源が分離されていてもCH522Tの電源が5Vである限りは、
_  問題は発生すると思います。

_ CH552 VCC まとめ:
_ 出力(4V)がESP32(EN,GPIO_0,GOIO1,GPIO3)に接続されESP32が異常動作します。
_ ESP32 GPIO_0 への電圧を 3.3V にすると WiFi出力は 正常になります。
_ ESP32への電圧は重要でWiFi出力や再起動動作に密接です。
_ 対策:Z-diode。抵抗を直列接続、VCCを3.3Vにする。抵抗分割(1KΩ+2KΩ)で接続する。

_ 🍎 対策:CH552Tの電源(VCC:19,V33:20)を3.3Vにする。

_ 🍎 対策:CH552T_TXD1(5) –> 1KΩ PULL UP -> 3.3V

3. M5ATOM の抱える WiFi エラッタを改善する策をまとめた
_  CH552のVCCが4Vの為 WiFiエラッタを発生させている。GPIO_0=4.03V
_  こば氏:対策:CH552_TXD1 出力に 3.3V Z-diodeを接続しESP32を正常動作にする。
_  ESP32 GPIP_0の電圧を 3.3Vにして正常に動作。迅速な対応に感謝致します。
_ 🍎 対策:Z-diode。CH552T_TXD1(5) -> 3.3V Z-diode -> GND。TXD1(5) は 2.5V になる。

4. Short Wifi effective range and IO0=3.9V issue with Lite and Matrix
_  調査分析と対策案:そーたメイ氏はよく調べています。感謝致します。
_  WiFIの有効範囲は短かい。
_  CH552によって駆動されるIO0ポートは3.9Vで、ESP32の絶対最大定格ではNG。
_  IO0を3.3Vにすると、有効範囲は8mから14m以上に拡大された。
_  この件に関し、M5Stack Forumで M5Stack社は回答せず、無回答状態です。
_  ATOMを改善する為に ここまで分析、投稿しましたが返事無く M5Stack社は失礼ですね。
_  つまり CH552の設計ミスである事を示しています。

5. 他社 CH552 の使用例。
5_a. Maix Duino:VCC(20)=5V, V33(19)=10uF
5_b. SIPPED Tang Nano:VCC(20)=3.3V, V33(19)=3.3V
_   Schematic
_   🔴 Tang Nanoは 3.3V系で CH552 VCC,V33 は 3.3Vを使用しています。
_   SIPPEDは CH552の正しい使用方法を熟知しています。
_   この接続方法が M5Stack ATOMの回答と判断しています。
_   メモ:SIPPED TangNano4Kは BL702を使用しています。


.
資料:
ESP32-PICO-D4:Datasheet Version 1.9
_ Page 6, Hardware Operating voltage/Power supply =3.0 V~3.6 V
販売:
_ ATOM Lite SKU: C008:Document:Schematic
_ ATOM Matrix SKU: C008-B
_ ATOM Echo SKU: C008-C
CH559日本語資料: 2019-03-30
Sipeed-MaixduinoMaixduino_2832(Schematic).pdf:CH552
技術者見習いのメモ書き:CH552
Add ESP32 Boards CH552 #1032:CH552(VID=0x0403, PID=0x6001)


.
CH552 まとめ:
CH552のVCCは 3.3〜5V仕様ですからESP32に合わせVCCを3.3Vにすべきです。
上記の条件から何故 M5Atomは 5Vに接続したのでしょうか? 理由を聞きたい。
ESP32の仕様に合わせ 3.3Vにすれば CH552の出力が 3.3Vになり
ESP32内部で起きる不可解な不具合が解消されるでしょう。
設計ミスなら全製品を回収,交換すべきと こばさんが怒っていました。同感です。

更なる根拠:
私は M5Stack ATOMは購入していません。どなたか ハンダ付け修正大変ですが
ATOM CH552のVCCを3.3Vにして確認して欲しいです。
VCCを3.3Vにして正常動作するならば、不具合と対策が証明されます。



.
CH340:
_  CH552と類似したチップで同じ現象。
_  そーたメイ氏:別のESP32デバイス(Wemos D1 R32)で同じ問題を見つけ、
_   espressif githubの問題に報告しました
_  CH340 VCCは 5Vの為に 出力のDTRとRTSに5Vが出力されESP32の仕様を逸脱。
_  TTGOのT8 Boardは CH340 VCCを 3.3VにしておりTTGOの設計者はKnow How
_  を把握しています。

原因:CH340CのVCCにUSBの5Vを使用している為に DTR,RTSに5Vがでて
_   ESP32の動作が異常になります。つまり設計ミスです。
対策:CH340C の VCCに 3.3V を接続します。
_   これにより DTR,RTSには 3.3Vが出て ESP32は正常に動作します。

対策事例:TTGOのT8 Board(ESP32-S2-WOOR V.1.1)は CH340C を使用し
_   VCC は 3.3Vを接続しています。これにより DTR,RTSは 3.3Vで正常に動作しています。
_   尚、CH340C は古いマックでは 問題がありマックが再起動してしまいます。

他のボード:CH340C+ESP32のボードには この設計ミスが多いです。

過去にCH340Gでも設計ミスによりCH340Gから高い電圧がでていたボードがありました。
CH340の仕様と実測からRTS, DTRは 5V出力です。
ESP32の仕様は 3.3V。よって仕様から逸脱した設計です。
使用する場合は 例として 5V -> 3V LEVEL 変換が 参考になります。

過去に ESP8266 と CH340G で構成された ESP-12F と言う画像の製品は 5Vの問題があり、
2016年2月に 突然 販売停止になっています。
消えたボード


.
感想:
ESP32-PICO-D4 電源仕様 3.0V~3.6V に CH552 から 4Vを接続しています。
仕様外の電圧を加える事は、基本中の基本を外れています。
設計ミスの商品を M5Stack社 とスイッチサイエンスは 販売を続けています。

不具合の根本的な原因は、設計者がICの仕様書を読んでいない為でしょう。
スイッチサイエンスの商品で USB Adapter, ESP8266 Board, ESP32 Board も
設計ミスがあり、その原因は ICの仕様書を読んでいない為です。
仕様書を読み、動作電圧の確認とオシロスコープで信号確認をすれば不具合は防げます。

CH552の低価格に目を向けずに、素直に CP2104 を使用すれば良いと思っています。

Jimmy Lai氏(CEO)は 以下の様に答えています。2021.10.11
thanks for your report, we will think about the solution,
maybe using the new usb-uart ic or using c3 directly.

jimmy Thank you for your comment.

>私たちは解決策について考えます
問題がある事を認識していると言う事です。
問題のある商品をこれまで多数販売していました。
この事から 現在の商品 や 次の商品 に対し何をするべきかが出てきます。
M5Stack社が これまでや現在の問題ある商品に於いて、購入者に対して
対応ができるレベルの企業に発展する事を望んでいます。
スイッチサイエンスの販売代理店としての対応も同様です。

>新しいusb-uarticを使用するか、c3を直接使用する可能性があります。
1. CH552 以外に ESP32に適した USB UART IC は CP2104と認識しています。
_ Espressif Systems の 基板の多くは CP2102,4 を採用しています。
_ Espressif Systems の ESP32-S2-DevKitM-1 は CP2102N を採用しています。
_ ESP32-S3 Series

2. C3 は OTG が出来るなら USB UART IC は不要になるかと想像しています。
_ LOLINの S2 mini は S2 を使用し USB UART IC は使用していません。
_ しかし、OTGができると言いながら OTG の説明は無く実現していません。


.
.
.
ATOM , ATOM Matrix , ATOM Lite , ATOM ECHO , WiFi , 再起動 ,

Written by macsbug

10月 10, 2021 at 11:06 am

カテゴリー: M5STACK

BASIC CORE ESP32 IOT DEVKIT

leave a comment »

M5Stack Basic Core ESP32 IoT Development Kit の購入と分析。 2021.10.05

COMM EDITON BASIC CORE ESP32IOT DEVKIT
黒い半透明のケースを使用した M5Stack です。

販売:M5Stack Basic Core ESP32 IoT Development Kit 2021年9月販売開始。
価格:4089円。(送料含む)
輸送期間:18日。販売店で出荷するまで6日を要し社内処理が遅いです。
販売:M5Stack Basic Core ESP32 IoT DevKit COMM Edition:SKU:K001-B

設計と製造ミスがあります。原因は これまでの基盤と金型を使用している為です。
新しいM5Stackは 修正もせず 以前の不具合を含んだままの状態で販売しています。

以下、5つの不具合があります。
特に 3 のM-BUSとSpeaker は ショートにより ESP32 を破損する危険があります。
1. USB-C
2. SD SLOTの穴
3. M-BUSとSpeaker:M-BUSがShortの危険性。
4. SD SLOT
5. スイッチカバー


.
ケースはとても綺麗です。

.
PCB Version:2018.2A:今回のバージョンはケースを製作しただけですね。
- M5Stack Fireも PCB Version:2018.2A です。

参照:Parts arrangement of M5Stack:2020.04.01:M5Stackの分析と問題点。
参照:USB-C and USB Adapter of M5stack:2020.12.18:M5Stack USB-Cの分析と問題点。


.
1. USB-C

- 問題点:SUB2 配線ミス。CC2は 5.1KΩあるが CC1 (Open) は なし。

- 症状: CC2しか感知しない為、USB-C の片側方向しか使用できない。

- 解決策:基板を作り直す。 ( Core2 は 正しいパターンに作り直されている )

- 苦肉の策:Micro USB to USB Type-C Data Adapter を使用する。
-  参照:USB-C and USB Adapter of M5stack:2020.12.18

メモ:USB-C の Pin を check する TYPE-C male to female connector adapter
_   価格:1262円。輸送期間:16日。


.
2. SD SLOTの穴

- 問題点:穴の位置がずれている。

- 症状: SDがケースの中に落下する。

- 解決策:金型を作り直すべきである。

- 苦肉の策:同封のシールを内側に貼る


.
3. M-BUS と Speaker

- 問題点:金属面のクリアランス少なく接触しかかっている。

- 問題点:M-BUS同士 又は M-BUSがGNDにショートする危険が極めて大きい。

- 解決策:M-BUSとSpeaker間に絶縁体を入れるべきである。
-     M5Stack , M5Stack Fire では カプトンテープがSpearke金属面に貼られています。

- 苦肉の策:同封のシールを内側に貼る


.
4. SD SLOT

- 問題点:Pin の位置がずれている。

- 問題点:半田付けが汚い。

- 解決策:ハンダ付けのスキルアップ。


.
5. スイッチカバー

- 問題点:0.1mm サイズが小さく、薄いシートを挟んでいる。

- 解決策:スイッチカバーを +0.1mm 厚くしたカバーを作り直す。

- 余談 :スイッチカバーを 3Dプリンターで作り直し抜群のクリック感になりました。
-     0.1mm とは ポストイットの紙の厚さです。


.
.コメント欄記入:購入者に解る様に 販売のコメント欄に記入致しました。


.
感想:
設計、製造ミスがあり商品のレベルが低いです。
今回のバージョンは 売れ残った基板を使用し ケースを他の材質にしたものですね。
予備の為に調査購入しましたが、追加購入は やめ様かと思っています。
この不具合点と解決策を知って使用しましょう。


.

Written by macsbug

10月 5, 2021 at 7:10 pm

カテゴリー: M5STACK

LIst of 2021

leave a comment »

2021年度リスト                        2021.10.03

List of 2020:2021.10.03
List of 2019:2019.12.31
List of 2018:2019.12.31
List of 2017:2019.12.31
List of 2016:2019.12.31
List of 2015:2019.12.31
List of 2014, 2012, 2011:2019.12.31

2021年の記事をリストにしました。随時追加します。

Date View Title / Content cost
2021
10/

2021
10/10

Bugs and measures for M5Stack ATOM

M5Stack ATOM の不具合と対策

2021
10/05

BASIC CORE ESP32 IOT DEVKIT

M5Stack Basic Core ESP32 IoT
Development Kitの購入と分析

2021
09/29

First SwiftIO

初めての SwiftIO

$58
2021
09/18

Bug Report for S2 mini v1.0.0

S2 mini v1.0.0 の Bug Report

2021
09/17

4-Axis Joystick for M5Stack

M5Stack用の
4-Axis Joystick Adapterを製作

2200円
2021
09/08

5 Way Switch for M5Stack

M5Stack用の
5-Way Switch Adapterを製作

1000円
2021
07/05

CO2 monitor with M5Stack and LVGL

M5StackとLVGLで
CO2 , TVOC モニターを製作

1000円
2021
07/03

LVGL with M5Stack Part 2

M5StackでLVGLを動かす その2

2021
06/18

How to run LVGL
on M5Stack (ESP32)

LVGLをM5Stack(ESP32)で
動かす方法

2020
05/02

ButtonA on M5Stack
does not work properly

ButtonAが勝手に動作する
原因と対策

2021
04/16

Web Radio
with a built-in speaker
in M5Stack

M5Stack Web Radio 製作

1000円
2020
02/19

Web Radio of M5Stack
PCM5102A I2S DAC

PCM5102AでM5Stack Web Radio

1000円
2021
02/14

Web_Radio_of_M5Stack_I2S_DAC

UDA1334AでM5Stack Web Radio

980円
2021
01/08
Web Radio of M5Stack

VS1053でM5Stack Web Radio

1200円

 


感想:
記事の全体が見づらい為に、年度毎のリストを作りました。
左から 日付、画像、名前とリンクと説明、費用 で分類しています。


 

Written by macsbug

10月 3, 2021 at 9:12 am

カテゴリー: Apple, ESP32, M5STACK, SwiftIO

List of 2020

leave a comment »

2020年度リスト                        2021.10.03

List of 2019:2019.12.31
List of 2018:2019.12.31
List of 2017:2019.12.31
List of 2016:2019.12.31
List of 2015:2019.12.31
List of 2014, 2012, 2011:2019.12.31

2020年の記事をリストにしました。

Date View Title / Content> cost
2020
12/18

USB-C and USB Adapter
of M5stack

USB-C CC1の配線が無い

2020
12/17

3D MAZE of M5stack

TTGOの SpaceWars Game を
M5Stackに移植

2020
12/06

SpaceWars of M5Stack

TTGOの SpaceWars Game を
M5Stackに移植

2020
12/03

BOUNCE BALL of M5Stack

TTGO BOUNCE BALL Gameを
M5Stackに移植

2020
07/06

M5Stack WristWatch

ATmage328P MI/O腕時計を
M5Stackに移植

2020
07/02

LovyanGFX LCD Graphics driver

高速グラフィックスドライバー

2020
06/24

M5 Expansion Adapter for Wio

M5Stack Interface を使用できる
Wio Expansion Adapterの製作

427円
2020
06/09

Expansion Module
with battery for Wio

Wio Expansion Module の製作

1231円
2020
06/09

Wio Ext Flash Loader

Wio Terminal版 SD Update

2020
06/02

Wio ThermalCamera

seeedのThermal Camera Library

4695円
2020
06/01

Wio Thermal Camera AMG8833

AMG8833 Thermal sensor
を動かす

4695円
2020
05/31

Introduction to Wio Terminal

Wio Terminal 入門

2020
05/28

Wio Audio Spectrum Display

Wio Terminal 内蔵マイクの音を
スペクトラム表示

2020
05/27

Wio Space Shooter

WioにSpace Shooterを移植

2020
05/26

Wio Electronic Animated Eyes

電子アニメーションの目を表示

2020
05/25

Wio nixie tube clock

zip.

Wio Terminalでニキシー管時計

2020
05/25

Wio Simple Battery

Wio Battery Module を製作

2020
05/23

Wio Game 2

Wio Terminal に Game を移植

2020
05/23

Wio Game 1

Wio Terminal に Game を移植

2020
05/22

Wio Tetris

Wio Terminal に Tetris を移植

2020
04/13

How to set 5V to 3.3V
¥for M5Stack Grove

M5Stack Groveの5Vを3.3Vにする

2020
04/07

USB Cable and Reset prevention

USB Cable と Reset 防止

2020
04/01

Parts arrangement of M5Stack

M5Stackの部品名付 図面を作成

2020
03/24

M5Stack USB failure and repair

M5StackのUSB故障と修理

110円
2020
02/28

Notepad for parts

部品のメモ帳

2020
02/15

M5Stack Breadboard

M5Stack Breadboard の製作

344円
2020
02/12

M5Stack Push Button Controller

M5 Push Button Controller製作

264円
2020
02/06

Make M5StickC GROVE Directly Connected Pin

M5StickC GROVE 直結
Female-Female-Pin の製作。

2010.02.06

50円
2020
02/04

M5 Wheel ( moio ) part 3

M5Stack moio のケースを
低解像度3Dプリンターで製作

126円
2020
02/01

M5 Joystick and moio control

M5Stack Joystickとmoioの操作

727円
2020
01/30

Make an M5Stack case. Part 1

低解像度 3D Printer で
M5Stack のケースを作る

1905円
2020
01/29

Repair of 3D Printer Replicator 2X

3D Printer Replicator 2X の修理

1304円

 


感想:
記事の全体が見づらい為に、年度毎のリストを作りました。
左から 日付、画像、名前とリンクと説明、費用 で分類しています。


 

Written by macsbug

10月 3, 2021 at 9:09 am

カテゴリー: ESP32, M5STACK, Wio Terminal

First SwiftIO

leave a comment »

初めての SwiftIO                     2021.09.29

MadMachine の SwiftIO ($58) は Arduinoに似たシステムです。
ハードウェア上で Swiftコードを実行できます。
MadMachineで設計された SwiftIO は、Swift言語をサポートするように設計されたボードです。
開発環境は MadMachine IDESwiftIO Library により Mac、Windows、Linux で開発ができます。


.
仕様;
i.MX RT1052 Processor with Cortex-M7 core @600MHz
_ NXP Semiconductors Data Sheet: MIMXRT1052DVL6B
Zephyr RTOS support
8MB Flash, 32MB SDRAM
On-board DAPLink debugger
USB to UART converter for serial communication
Built-in RGB LED
SD card slot
46 GPIO, 12 ADC, 14 PWM, 4 UART, 2 I2C, 2 SPI, etc.
Many additional advanced features to meet the needs of advanced users
USB Speed: 115200


.
準備:資料
1. madmachine.io:MadMachine website:SwiftOの購入ができます。
2. Docs / MadMachine SwiftIO:Supported Features ,
_  Connections and IOs , Configuring a Console
3. Docs / MadMachine SwiftIO Feather:Supported Features (I2S),
_  Connections and IOs , Configuring a Console
4. The.Swift.DEV:Getting started with SwiftIO:2020/11/12
5. MadMachine Resources
_  Introduction , About our project , Getting Started , Tutorial ,
_  Examples , Library Reference , FAQ
6. SwiftIO Reference
_  Documentation , Library structure , Examples , IDE Installation
7. Github:EmbeddedSwift / SwiftIO
_  SwiftIOライブラリは、関連するクラス/メソッドを呼び出すだけで、
_  外部回路と通信するための簡単なアクセスを提供します。
8. Github:MadMachine:Original
9. Github:orangeji11/Examples:AdvancedIO(ILI9341, MidiPlayer, SSD1315)
10. BricjGeek:Maker Kit for SwiftIO de Madmachine
_  AppleのSwift言語でマイクロコントローラーをプログラミングするために
_  Madmachineによって作成されたスターターキットの説明。
11. Youtube:You can learn MadMachine and SwiftIO in 2 minutes:2020/03/03
_  MadMachineとSwiftIOの紹介。SwiftIOのプログラミング方法など。
12. Youtube:MadMachine
13. Youtube:From components to SwiftIO board:製造:Edadoc:深圳市一博电路限公司
14. MadMachine SwiftIO $68


.
準備:機材の例。
1. SwiftIO Board
_  Kit価格:$108。輸送期間:13日。MadMachine SwiftIO Board:$58
2. MadMachine IDE ver Beta 0.2.3
3. MacBook Pro(16-inch, 2019) macOS Catalina V10.15.7
4. Xcode 12.0.1:Mac 及び macOS に適合した Version を使用します。

メモ 1:MadMachine IDE で 72等のエラーが出る場合は Xcode が Install されていないか
_    接続されない為で、ネット検索し Terminalで必要な sudo をを実行すると
_    エラーが無くなり 使用出来る様になります。
メモ 2:SwiftIO は 開発中でもあり LIbraryを把握し 出来る事と出来ない事を切り分けます。

MadMachine IDE:

操作:
左上から3つ目のアイコン( レ )が コンパイル、4つ目( ↓ )はビルドです。
左上から5つ目( >_ ) は シリアルモニターの画面が表示されます。
左下は SwiftIO Board が接続された状態です。
- SwifiIO Board の DOWNLOAD MODE ボタンを押すと基板のLEDがGreenになり接続されます。

MadMachine IDE File:場所:Document (書類)


.
ArduinoやM5Stackとの比較:SwiftIOのサイズは 4x6cm です。


.
SwiftIO:SD Boot 方式
SwiftIOは MadMachine IDEで開発し ビルドすると SDの中に swiftio.bin が書き込まれます。
デスクトップには SDのアイコンが表示され SDの中には swiftio.bin ファイルができます。
電源起動時は SD から swiftio.bin が読み込まれ プログラムが動作します。
SD Boot方式で なかなか便利な機能です。


.
プログラム:Lチカ
- GPIO D1 に Resistor付きLEDを接続しGNDします。

import SwiftIO
import SwiftIOBoard
let P1 = DigitalOut(Id.D1)

while true {
  P1.write(true)   // LED ON
  sleep(ms:  25)
  P1.write(false)  // LED OFF
  sleep(ms: 250)
}

- 基板上の RGB LED を使用する場合:

import SwiftIO
import SwiftIOBoard
let BlueLED = DigitalOut(Id.BLUE) // RED, GREEN, BLUE

while true {
  BlueLED.write(false)  // LED ON
  sleep(ms:  25)
  BlueLED.write(true)   // LED OFF
  sleep(ms: 250)
}

 


.
感想:
念願の Apple Swift で動作する電子工作ボードが出ました。
できればアップルからアップルマーク付きのケース付きで出して欲しい、、無理か。

プログラムが難解かと思われましたが Lチカの様にArduino風で容易にできそうです。
ESP32で不足だった GPIO数は 圧倒的な数があり自由に使用でき安心です。
WiFiチップ は 搭載されていませんが 必要になるまでプログラムをこなして行けます。
初めて準備する中で、MadMachine では Xcode Install や SD Boot の説明がありませんでした。

MadMachineで入門に用意されている物は Maker Kit for SwiftIO $108 で大した内容では
ありませんが、現在これしかありません。
サイズが 4x6センチで基板製作が容易です。M5Stackの様な作りづらさはありません。
秋月電子通商で小さな基盤を購入して気楽に作れます。
課題は Libray がそろうかですね。特にDisplay が充実して欲しいです。

I2S:
Docs / MadMachine SwiftIO:Supported Features に I2S の記述無し。
Docs / MadMachine SwiftIO Feather:Supported Features に I2S の記述あり。
この内容によると SwiftIO には I2S の機能は無い。

NXP Semiconductors Data Sheet: MIMXRT1051DVL6B
• 600 MHz, commercial grade for general purpose with MPU/FPU
• eDMA
• Boot ROM (96 KB)
• On-chip RAM (512KB)
• SEMC
• GPT x2
• 4-channel PIT
• PWM x4
• ENC x4
• WDOG x4
• No LCD/CSI/PXP
• SPDIF x1
• SAI x3
• MQS x1
• USB OTG x2
• eMMC 4.5/SD 3.0 x2
• SPI x4
• Ethernet
• UART x8
• I2C x4
• FlexSPI
• CAN x2
• FlexIO x2
• 127 GPIOs
• HAB/DCP/BEE
• TRNG
• SNVS
• SJC
• ADC x2
• ACMP x4
• TSC
• DCDC
• Temperature sensor
• GPC hardware power management controller


.
.
SwiftIO , MadMachin IDE , Xcode , GPIO ,

Written by macsbug

9月 29, 2021 at 5:45 pm

カテゴリー: Apple, SwiftIO

Bug Report for S2 mini v1.0.0

leave a comment »

S2 mini v1.0.0 の Bug Report              2021.09.18

LOLINから販売されている WEMOS.CCの S2 mini v1.0.0 は シルク印刷のエラーがあります。
シールの印刷は 正しいです。( シルク印刷ミスの確認後に製作したと想像 )
基板に印刷された GPIO 12,13 で使用すると正常に動作しません。

エラーの場所:基板の GPIO 12 と 13 です。画像の赤線です。

誤:GPIO_12。正:GPIO_13。
誤:GPIO_13。正:GPIO_12。

Bug Report.
Silk printing mistake.
Wrong: GPIO_12. Correct: GPIO_13.
Wrong: GPIO_13. Correct: GPIO_12.
The sticker (front side: for parts side) is printed correctly.

対策:GPIO 12 を 13, GPIO 13 を 12 でプログラムすると正常に動作します。
販売:ESP32 S2 Mini V1.0.0

WEMOS.CCの製品で LOLIN Official Store から販売です。
2021年8月22日に販売が表示され、既に 申し込みは 100 Order。
価格:$7.75 ( 850円 )。3個注文で 1個 692円。
配達:10月6日 配達予定。その後 配達が早まり 11日間で速い到着。
仕様:MCU=ESP32-S2FN4R2, USB OTG, Without BLE and TELEC。
書込:RST Button と GPIO-0 Button のマニュアル操作で書き込みます。
_   WEMOS S2 MIni に書かれています。
_   USB OTG で書込みが出来るらしいですが方法は不明です。
資料:Hackaday:May 21,2019:ESPRESSIF ANNOUNCES ESP32-S2 WITH USB
_   Brian Benchoff氏の記事とコメントは 読みがいがあります。
要約:43 GPIO。🔴 Parallel LCD。BLE未サポート(BLE無し)。
注意:現在、販売されている S2 Mini と他社のESP32-S2は Without TELEC です。
部品:基板上にあるICはESP32-S2とLDO(ME6211C33:Max500mA)のみと他にX’Tal。
_   従来のSerial IC (CP2102やCH340C)、AUTO PROGのICは 無しの
_   シンプルな基板で 900円以下の低価格を実現しています。
資料:ESPRESSIF:ESP32-S2 Family
資料:WEMOS S2 MIni
回路図:Schematic V1.0.0[PDF]
起動:CHIP_PU, ENは 100nF + 10KΩ , τ=4.7μsec となっており、充分な起動時間です。
_   ESP32 Dev kit は 1nF + 470Ω , τ=0.22μsec で短く 起動が不安定になります。
_   470Ωは 10kΩにすべきです。τ=0.47μsec で ESP32 MiniKIt と同じになります。
Arduino IDE:
_   Boardは ESP32S2 Dev Module。Serial Connected To:”USB CDC” を選択します。
_   WEMOS S2 MIni に書かれています。


.
販売状況:
2021.08.20:100 orders:発売日
2021.08.28:174 orders
2021.08.29:180 order
.
2021.09.17:284 Order で STOP

Sorry, this item is no longer available.

販売予定日:
LOLIN販売店からは ⭕「約10日後」との返事がありました。2021.09.18

追記:2021.10.11
S2 Mini V1.0.0:再販売開始:2021.10.10
シルク印刷ミスを連絡後 S2 MIni V1.0.0 の修正版が再販売されました。
GPIO 13 と 12 は 正しい位置に書かれています。
LOLIN販売店からは 約10日後と言っていましたが 21日でした。
284 Order で STOP していましたが 10/11 現在で 302 Orderです。



.
🔴 Parallel LCD 接続:
_ Display:MRB3511 3.5″ 320×480 8/16bit Parallel ILI9488 Display GT911 Touch
配線:全てのワイヤーは交差せず平行に配線しています。

.
表示:
LovyanGFX Libraryで LVGL widgets demoを動作させています。
_ LovyanGFX Libraryは 8bit 及び 16bit Parallel の動作が可能で高速に表示します。
_ TFT-eSPIの2倍の速度が実現出来ます。


.
感想:
Displayへ配線しましたが正しく表示しませんでした。
CS を GPIO12 へ、実は GPIO13で CS=1 のままで選択されたままなので
表示していますが画像が崩れていました。そりゃそうですよね。
GPIO-12,13の印刷エラーを見つける為に1日程時間を費やしました。
シルク印刷の不具合は 販売店のLOLINのMessage centerに伝えておきました。
返事は 次回のバージョンで修正との返事でした。その日時は不明です。
その後 販売店の表示には 不具合の状況は いまだに書かれていません。
2021.09.08 12:00:LOLIN販売店から「約10日後」の返事がありました。

シール:
以前の MH-ET LIVE ESP32 Mini KIt は ピン番号のシールはありませんでした。
8月22日発売で、10月6日 配達予定。その後 配達が早まり 11日間で速い到着。
これは 正しいピン番号のシール作成の為で、シールが速くできた為かと想像。
それで 配布予定が早くなったかは不明です。

書込みがマニュアル操作で面倒:
WEMOS S2 MIni の説明には RST, GPIO-0 Button によるマニュアル操作で面倒です。
OTGによる書込み方法は不明です。

ESP32-S2 は GPIO端子数が多く Parallel Display の 接続が可能で動作しました。
16bit接続で GPIOの残数は 3つです。8bit接続でも動作し GPIOの残数は 12 です。
Parallel 動作をさせる為に LovyanGFX Library の作成者である「らびやん」氏に お願い致しました。
多大なる開発の時間を要してい頂き、ここに感謝のお礼とさせていただきます。
MRB3511 Paralell DisplayとGT911 Touch の動作は 世界で唯一 LovyanGFX Library のみです。

TFT-eSPIは 8bit Parallel は 動作していますが Toutch機能は無くタッチ操作できません。
作成者のBodmer氏は 16bitは 手がけないと言っています。

販売数の予測:
2021.09.17:284 Order で STOP から1人4個として 約1000個の販売数と想像。

WEMOS.CC S2 mini と MH-ET LIVE ESP32 Mini Kit :
S2 mini と MH-ET LIVE ESP32 Mini Kit を 8bit Parallel Display で比較すると
MH-ET LIVE ESP32 Mini Kit の方が高速です。
つまり ESP32 S2 が 必ずしも速い訳では無いです。
この件は、現在分析中で後日ブログにする予定です。

.


.
.

LOLIN , WeMos , ESP32 , S2 mini , GPIO , 12 , 13 , BUG , シルク印刷ミス , Bug Report for S2 mini v1.0.0

Written by macsbug

9月 18, 2021 at 5:37 am

カテゴリー: ESP32

4-Axis Joystick for M5Stack

leave a comment »

M5Stack用の 4-Axis Joystick Adapter を製作しました。 2021.09.17

つかみやすく 角度により重さのフィードバックがあり 感触が良いです。
とても操作しやすく ゲームを続けたくなる楽しさが出てきます。

Tetris v4

.
M5 WiFi Joystick

M5 WiFi Joystick で M5 Wheel Module ( moio ) を操縦。

以前に製作した Joystick:

.
Down Load:Tetris_v4.zip:DL後 pdfを削除しzipを解凍します。
Down Load:M5_WiFi_Joystick.zip:DL後 pdfを削除しzipを解凍します。


.
準備:
費用:2200円。Joystick の価格が 1700円で総額が高くなります。

No. Nomen Price
1 4-Axis JH-D400X-R4 10K $15.36

_ Resditance Value: Standard 10KΩ
_ Resditance Tolerance: ±20%
_ Independent Linearity: ±1%
_ Resolution: Essentially Infinite
_ Outpoot Smoothness: 0.5% maximum
1700円
2 0.3mm厚 角形ランドユニバーサル基板 秋月 120円
3 Connentor ( L型ピンヘッダ, ピンソケット,ピンヘッダ) 秋月 180円
4 Top Cover 20円
5 Spacer Cover 4ea ( H=20mm ) 80円
6 Rear Cover 20円
7 Other 80円
Total 2200円

メモ:Joystick、購入時(2020.04.16) 1260円。輸送期間 41日。


.
配線:GPIOを4本と3V3, GNDを配線します。

COVER


.
参考:
1. M-BUS Expander module for M5Stack:2018.10.21
2. M5Stack Extension Module:2018.12.30
3. M5Stack Push Button Controller:2020.02.12
4. M5Stack Joystick and moio controll:2020.02.01

5. Thingivers:M5Stack Extension Module by macsbug:by macsbug January 30, 2020
6. Thingivers:M5Stack Push Button by macsbug:by macsbug February 12, 2020
7. Thingivers:M5Stack Joystick by macsbug:by macsbug February 01, 2020


.
スケッチ:JoyStickに関する部分です。
Tetris_v4 : Joystick の 入力処理。
_ GPIOの設定は INPUT_PULLUP をします。
_ X,Yの値は 0-4095 で 1500, 2500 で 境の値を決めています。

// joystick
int NB_volume = 36;
int UD_volume = 35;
int LR_volume = 34;
int SW        = 22;
//========================================================================
void setup(void) {
void joystick_init(){
  pinMode(NB_volume ,INPUT_PULLUP); pinMode(UD_volume,INPUT_PULLUP);
  pinMode(LR_volume ,INPUT_PULLUP); pinMode(SW       ,INPUT_PULLUP);
}
//========================================================================
void ClearKeys(){ST_ROT=false;b_LEFT=false;b_RIGHT=false;b_DOWN=false;}
//========================================================================
bool KeyPadLoop(){
  int KB = analogRead (NB_volume); // 290 - 2300 - 4095
  int LR = analogRead (LR_volume); //   0 - 2060 - 4095 , 2110-2010
  int UD = analogRead (UD_volume); //   0 - 1985 - 4095 , 2040-1930
  int RT = digitalRead(SW);
  Serial.print(LR);Serial.print(" ");Serial.println(UD);
  // 6 Axis joystick -----------------------------------------------------
  if(LR < 1500){ClearKeys();b_LEFT =true;return true;} // LEFT
  if(LR > 2500){ClearKeys();b_RIGHT=true;return true;} // RIGHT
  if(RT == LOW){ClearKeys();ST_ROT =true;return true;} // ROTATION
  if(UD > 2500){ClearKeys();b_DOWN =true;return true;} // DOWN
T:if(UD < 1500){                                       // PAUSE
    if (w_pause){w_pause = false ; delay(250); return false;}
    ClearKeys(); w_pause = true; 
    M5.Lcd.setCursor(134,2); M5.Lcd.println("PAUSE");
  }
  if ( w_pause ){ delay(150); goto T;} // PAUSE
//========================================================================

M5_WiFi_Joystick
Volumeの値は 変動する為に センターでは 変動を吸収した値に変換しています。

int xr = 34; // GPIO,Center=118+-6,LEFT=  0,RIGHT=255 // 0 - 1970 - 4095
int yr = 35; // GPIO,Center=115+-6,UP  =255,DOWN =  0 // 0 - 1970 - 4095
int zr = 36; // 290 - 2300 - 4095
int sw = 22; // GPIO

//=====================================================================
void loop() {
  int xp = analogRead(xr);      // x : 0 - 4095 , 2110-2010
  int yp = analogRead(yr);      // y : 0 - 4095 , 2040-1930
  Serial.print(xp);Serial.print("  ");Serial.println(yp);
  if (xp<=2010 )           {xp=xp*2110/2010;}// compensation
  if (xp>=2010 && xp<=2110){xp=        2048;}// compensation
  if (xp> 2110 )           {xp=          xp;}// compensation
  
  if (yp<=1930 )           {yp=yp*2040/1930;}// compensation
  if (yp>=1930 && yp<=2040){yp=        2048;}// compensation
  if (yp> 2040 )           {yp=          yp;}// compensation
  
  if (xp <    0 ){ xp =    0;}
  if (xp > 4095 ){ xp = 4095;}
  if (yp <    0 ){ yp =    0;}
  if (yp > 4095 ){ yp = 4095;}
  int xc = map(xp, 0, 4095, -119, 119);      // disp : -119 to 119
  int yc = map(yp, 0, 4095, -119, 119);      // disp : -119 to 119
//=====================================================================

.
感想:
Joystickの軸が外れない為, Joystickの上部カバーは Joystickの軸を通す穴を開けました。
このJoystickは 手で持ちやすくフィードバックもあり操作しやすいです、
スイッチも親指で操作しやすいです。
外部接続(Expansion)方式は 取り付け取り外しが簡単で便利です。


.
.
.
4-Axis Joystick , M5Stack , Expansion , Extension , Tetris , moio , M5 Wheel Module ,

Written by macsbug

9月 17, 2021 at 9:13 am

カテゴリー: M5STACK

5 Way Switch for M5Stack

leave a comment »

M5Stack用の 5-Way Switch Adapter を製作しました。 2021.09.08

指に合うサイズ と 感触の良いスイッチです。
とても操作しやすく ゲームを続けたくなる楽しさが出てきます。



.
操作方法:
_ スタート :中央のスイッチ:START
_ 回転   :中央のスイッチ:TURN
_ 左方向  :左 のスイッチ:LEFT
_ 右方向  :右 のスイッチ:RIGHT
_ 停止 / 開始:上 のスイッチ:PAUSE

Down Load:Tetris_v3.zip:DL後 pdfを削除しzipを解凍します。


.
準備:
費用:600円。

No. Nomen Price
1 5-Way Switch ( 35mmΦ )
1 LongerBeautify Store ( $2.40, 輸送:11日) 265円
1 EziUsin Official Store ( $4.00, 輸送:11日) 441円
1 Century Mingsheng Store ( $4.10, 輸送:11日) 452円
1 aitendo:5方向スイッチ:2021.9.9 発売。送料別で330円 330円
2 Expansion Adapter:参照:M5Stack Push Button Controller 300円
Total
600円

メモ:5-Way Switchのサイズは 35mmΦです。購入時にサイズを確認します。
メモ:中央のスイッチは「OK」だけでなく、他のデザインもあります。
メモ:ケースは 下記にある「参考」の BLOG 又は Thingiversを参照下さい。


.
配線:GPIOを4本とGNDを配線します。
_ メモ:Switchの端子位置は 基板(2.54mm)と僅かのズレがある為、
_    取り付け位置を調整します。
_    基板製作の場合は Switchの端子位置に合わせて作ります。
_    GPIOは Switch Pushで GNDになります。

M5StackのExpansion(左) と Expansion Adapter(右) を使用します。
コネクターは2列で 固定具合は良く安定しています。


.
参考:
1. M-BUS Expander module for M5Stack:2018.10.21
2. M5Stack Extension Module:2018.12.30
3. M5Stack Push Button Controller:2020.02.12
4. Thingivers:M5Stack Extension Module by macsbug:by macsbug January 30, 2020
5. Thingivers:M5Stack Push Button by macsbug:by macsbug February 12, 2020
6. Thingivers:M5Stack Joystick by macsbug:by macsbug February 01, 2020

tindle:Keypad shield kit, key combinations 3 pins + code:Arduino用のKeyPad Shield. $10
nanhaijiayuan store:5 way direction push button ON BOARD:基板付きのスイッチ。1954円


.
スケッチ:5 Way Switch の 入力処理。
_ GPIO端子は INPUT_PULLUP で PULLUPし digitalReadで Push(LOW)を調べます。

boolean ST_ROT=false, b_LEFT=false, b_RIGHT=false, b_DOWN=false;
boolean w_pause=false;
int w_left=13,w_upper=17,w_down=0,w_right=5,w_center=2;

setup(){
void five_way_switch_init(){
  pinMode(w_left  ,INPUT_PULLUP); pinMode(w_upper,INPUT_PULLUP);
  pinMode(w_down  ,INPUT_PULLUP); pinMode(w_right,INPUT_PULLUP);
  pinMode(w_center,INPUT_PULLUP);
}

loop(){
void ClearKeys(){ST_ROT=false;b_LEFT=false;b_RIGHT=false;b_DOWN=false;}

bool KeyPadLoop(){
  // 5way_Swicth ---------------------------------------------------------
  if(digitalRead(w_left  )==LOW){ClearKeys();b_LEFT =true;return true;}
  if(digitalRead(w_right )==LOW){ClearKeys();b_RIGHT=true;return true;}
  if(digitalRead(w_center)==LOW){ClearKeys();ST_ROT =true;return true;}
  if(digitalRead(w_down  )==LOW){ClearKeys();b_DOWN =true;return true;}
T:if(digitalRead(w_upper )==LOW){
    if (w_pause){w_pause = false ; delay(250); return false;}
    ClearKeys(); w_pause = true; 
    M5.Lcd.setCursor(134,2); M5.Lcd.println("PAUSE");
}

.
感想:
部品;5 way direction push button ON BOARD
– 基板付きのスイッチがありますが、価格が高い(1954円)為 使用しませんでした。
5-Way Switchは デザインと指のフィット感がとても良いです、
親指で操作し操作性は ボタンスイッチより良いです。
弱点;スイッチ音:スイッチボタンを押す時は 少し固く無音ではなく「カチン」と言う音がでます。
_ マイクロスイッチを使用すれば 柔らかく静かな音になりますが 入手できるスイッチは
_ 現在 これしかありませんので これで良しとします。
追加機能として I2C IC使用やGlove端子化すると GPIOを有効活用出来ます。
_ ゲームを移植しても あまり遊びませんが 5 Way Switch では、つい遊んでしまいます。


.
.
.
5-Way Switch , M5Stack , Expansion , Extension , Tetris ,

Written by macsbug

9月 8, 2021 at 9:13 am

カテゴリー: M5STACK

CO2 monitor with M5Stack and LVGL

leave a comment »

M5Stack と LVGL で CO2 , TVOC モニターを製作しました。      2021.07.05

CO2 , TVOC Digital CO2 Gauge
CO2 Chart TVOC Chart
M5Stack へ CCS811 CO2 VOC Sensor を接続:費用は 1000円


.
仕様:
1. 表示:eCO2 , TVOC Digital , eCO2 Gauge , eCO2 Chart , TVOC Chart
2. CCS811 10sec / 1 sec Sample:起動時に B Button を押すと 1sec,。通常は10sec。
3. 表示切り替え:左 = A Button , 右 = C Button
4. Auto / Manual Display:画面切り替えを 手動 又は 自動切り替え:B Buttonを押します。

構成:
1. 開発機種:MacBook Pro (16-inch, 2019) , macOS Catalina Ver 10.15.7
2. 開発環境:Arduino IDE 1.8.15
3. 開発環境:Board Manager:ES32 Arduino 1.0.6
4. Library:m5stack / M5Stack
5. Library:LVGL ( LittleVGL ):lv_arduino
6. Library:LGFX;LovyanGFX:高速化が可能です。
7. HARD:M5Stack
8. HARD:CCS811 CO2 VOC Sensor

DownLoad:lv_CCS811_M5Stack.zip:DL後 pdfを削除しzipを解凍します。
memo.ino に 開発に便利なメモが書かれています。


.
費用:1000円。( Without M5Stack )

No. Nomen Price
1 CCS811 Module 820円
2 CASE、基板、コネクター 180円
Total 1000円

メモ:AliExpress HNV Official Store:リストにある販売店は輸送期間 37日で少し長いです。
メモ:国内では 2000円から3000円等の 高い価格がありますので お調べください。
メモ:CJMCU-8128:二酸化炭素, 温度, 湿度, 気圧。 多数 測定可能なセンサー
_   価格=1723円 ($15.49)。輸送期間=17日。
_   CCS811:二酸化炭素。SI7021(校正付き) :温度, 湿度。BMP280:気圧。
_   CCS811+SI7021+BMP280 Carbon Dioxide Temperature Humidity 3in1 Module
メモ:CJMCU-8128+CCS811+HDC1080+BMP280:$16


.
配線:
CCS811:5本 ( VCC, GND, SCL, SDA, WAK )

CCS811 VCC GND SCL SDA WAK
M-BUS 3V3 GND 22 21 GND


.
M5Stackの A と C button で touchpad controll する方法。
_ tabview上に tabを4つ作ります。例:eCO2 TVOC , eCO2 , eCO2 , TVOC
_ tabの位置に touchpad操作をすると そのtabが選択されます。
_ touchpad 方式は x,y で位置を決めます。
_ M5stack は ボタンが3つの為に x,y 操作はできません。
_ y を固定し x を操作します。事前に x,y を決めて A, C Button で操作する方法もあります。
_ A Buttonで左、C Buttonで右 に touchpad操作で画面が移動します。
_ touchpadの state (LV_INDEV_STATE_PR) と x,y 情報が
_ lv_indev_drv.read_cb = my_touchpad_read; に接続され tab(1,2,3,4) が表示されます。
_ int tb = 4; :tab の数だけ設定しますと x の位置が自動的に計算されます。


my_touchpad_read:

int tb = 4;
//=====================================================================
int mx = screenWidth/(tb*4), my = 10, md = screenWidth/tb;
// Read M5Stack A B,C buttons as touchpad : Tabview select ------------
static bool my_touchpad_read(lv_indev_drv_t * indev_driver,
                             lv_indev_data_t * data){
  // A Button : Leftward ----------------------------------------------
  if (M5.BtnA.wasPressed()){
    mx = mx - md; if (mx < 0){ mx = screenWidth - (md / 4);}
    data->point.x = mx; data->point.y = my;
    data->state =LV_INDEV_STATE_PR; M5.update(); return true;
  }
  // C Button : Rightward ---------------------------------------------
  if (M5.BtnC.wasPressed()){
    mx = mx + md; if (mx > screenWidth){ mx = md / 4;}
    data->point.x = mx; data->point.y = my;
    data->state =LV_INDEV_STATE_PR; M5.update(); return true;
  }
  // B Button : Auto / Manual Display ---------------------------------
  if (M5.BtnB.wasPressed()){
    auto_man = !auto_man;          M5.update(); return false;
  }
  // No button operation ----------------------------------------------
  data->state =LV_INDEV_STATE_REL; M5.update(); return false;
}
//=====================================================================

my_touchpad_read の state と x,y 情報は
indev_drv.read_cb = my_touchpad_read; に接続されます。

// Initialize the Touch pad =========================================
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&amp;indev_drv);     //input device driver
indev_drv.type = LV_INDEV_TYPE_POINTER;//Touch pad is a pointer-like
indev_drv.read_cb = my_touchpad_read;  //Set your driver function
lv_indev_drv_register(&amp;indev_drv); //Finally register the driver
//-------------------------------------------------------------------

.
既製品:屋内多機能空気検出器
測定項目:HCHO,TVOC,TEMP,HUM,CO2,PM2.5,OM1.0,PM10
表示:数値表示とグラフ表示。
価格:11514円 ( $ 110.78 )。
輸送期間:20日。
販売:Aliexpress Gas Analyzer Store;ここの販売店は 他のGas Analyzer製品が多数あります。

同様な商品は IOT初期に 3〜5万円で 高価で購入するまでには至りませんでした。
この商品は 測定項目多く, 表示機能高く, ワーニング機能, 低価格, デザイン良く家庭で使用できます。
これらの機能やケースを全て含んだ電子工作をすると1万円以上になります。
さらに、綺麗なケースは作れません。そして 温度、湿度、気圧、CO2センサー等を作る経験では、
キャリブレーション,エージング、補正等々で難儀します。

結果、作るよりも既製品を購入した方が 合理的です。
よって、私は 電子工作で幾つか製作しましたが、この既製品を使用しています。
購入時の注意は フルスペックを選択します。センサーの少ない同等品は その分 安くなっています。

M5StackのPM2.5 大気質センサキットは 温度,湿度,空気質(PM2.5)のみで6350円もします。
そして サンプルは デイスプレーに数値を出す程度です。


.
LovyanGFXで高速化;
以下の様に記述しますと画面切り替えが速くなります。
M5Stack で使用する場合。

#pragma GCC optimize ("Ofast")
#include <M5Stack.h>
#include <lvgl.h>

LGFX で使用する場合。M5.Lcd を tft に変更し M5StackのSwicth命令は そのまま使用できます。

#pragma GCC optimize ("Ofast")
#include <M5Stack.h>
#define LGFX_AUTODETECT
#define LGFX_USE_V1
#include <lvgl.h>;
#include <LovyanGFX.hpp>;
static LGFX tft;

.
感想:
CO2センサーには 金属ケースに入ったタイプがあり サイズが大きく不便です。
CCS811 は 小型で工作が容易、ケースも小さくて済みます。
CCS811 センサーは 1sec Sample で 40度になると言われており、寿命が低下します。
その為に ファンで冷やすか 10sec 又は 60sec Sample で動作させるかになります。

デザインは、M5Stack の画面サイズに入るように作成しました。
画面ギリギリに作成するとスクロールバーが出てきますので、表示しない様にしています。
LVGLで見易く操作性を追求すると、限りなく既製品のデザインや機能のソフトに近づきます。

A,B,Cボタンしか無い M5Stackでマウス操作は難しいです。
LVGL Forum では ボタン操作のアイデアが投稿されています。
画面のスライドはマウスを「なぞる」事で上下左右 ができます。
このスライド「なぞる」事を検知する方法は まだ出来ておらず課題です。
タッチパットのあるディスプレーは 操作性が良いです。 M5Stackの様な
機械的なボタン操作は「操作している感触が指に伝わり、やり易い」面があります。

 


.
.
M5Stack , LVGL , CCS811 , CO2 , eCO2 , TVOC , LGFX , LovyanGFX

Written by macsbug

7月 5, 2021 at 10:52 am

カテゴリー: ESP32, M5STACK

LVGL with M5Stack Part 2

leave a comment »

M5Stack で LVGL を動かす その2。           2021.07.03

LVGL は多彩な表示が出来るグラフィックス ライブラリーです。
LVGL Library を使用すると、動画の様な表示が容易にできます。
例えば、針の形、目盛りの数値と間隔、色、等を容易に変更できます。
参考:How to run LVGL on M5Stack ( ESP32 )

初めての LVGL 体験で、何も解らず メモを備忘録として記載しています。

 
構成:
1. 開発機種:MacBook Pro (16-inch, 2019) , macOS Catalina Ver 10.15.7
2. 開発環境:Arduino IDE 1.8.15
3. 開発環境:Board Manager:ES32 Arduino 1.0.6
4. Library:m5stack / M5Stack
5. Library:LVGL ( LittleVGL ):lv_arduino
6. Library:LGFX;LovyanGFX:高速化が可能です。
 



.
スケッチの詳細:以下、4点について記載します。
1. 開発メモ と 宣言。
2. loop:タスクと入力処理。
3. disaplyの設定:決まりの部分。
4. setup:objet の 設定。
メモ:ebent処理は、使用していません。
.
GAUGE;
DownLoad:LVGL_Gauge_M5Stack.zip:DL後 pdfを削除しzipを解凍します。

開発メモ と 宣言:
メモ;URLを参考にプログラムできます。
宣言:
_ #pragma GCC optimize (“Ofast”) から
_  static lv_color_t buf[LV_HOR_RES_MAX * 10]; までは、決まりの部分です。
_ 35行目の static lv_obj_t * gauge; は、LVGLで表示するオブジェットです。

//=====================================================================
// GAUGE   : 2021.06.15 : macsbug
//---------------------------------------------------------------------
// Development : Arduino IDE 1.8.15
// LVGL    : v7.11.0-dev : https://docs.lvgl.io/7.11/
// Document: https://docs.lvgl.io/latest/en/html/widgets/
// Tabview : https://docs.lvgl.io/latest/en/html/widgets/tabview.html
// Label   : https://docs.lvgl.io/latest/en/html/widgets/label.html
// Guage   : https://docs.lvgl.io/latest/en/html/widgets/gauge.html
// L_Meter : https://docs.lvgl.io/latest/en/html/widgets/linemeter.html
// Forum   : https://forum.lvgl.io
// ESP32   : LVGL : https://programmersought.com/article/10128234373/
// HARD    : M5Stack.h
//    https://github.com/m5stack/M5Stack/blob/master/src/M5Stack.h#L19   
// BLOG    : How to run LVGL on M5Stack ( ESP32 )
//         : https://macsbug.wordpress.com/2021/06/18/
// BLOG    : ButtonA on M5Stack does not work properly
//         : https://macsbug.wordpress.com/2021/05/02/
// BLOG    : LVGL with M5Stack Part 2
//    https://macsbug.wordpress.com/2021/07/03/lvgl-with-m5stack-part-2/ 
//=====================================================================

#pragma GCC optimize ("Ofast")
#include <M5Stack.h>
#include <lvgl.h>
int screenWidth  = 320;
int screenHeight = 240;
#define LVGL_TICK_PERIOD 30
#include <Ticker.h>
Ticker tick;
#include <driver/adc.h>
static lv_disp_buf_t disp_buf;
static lv_color_t buf[LV_HOR_RES_MAX * 10];

static lv_obj_t * gauge;
uint32_t pointer = 0, inc = 1;
uint32_t lastMillis = 0;
int adc1_ch7 = 35; // GPIO 35 Input

 


.
loop:ループ
_ lv_task_handler(); は LVGLを動作させます。決まり事です。
_ if(millis() – time_ > 20 ){ 以降は GAUGEの針の入力です。
_  lv_gauge_set_value(gauge, 0, pointer);
_  pointer は 入力信号で、gaugeに送り、針を動かします。
_  信号を受け取る場所は、setup中の lv_gauge_set_value(gauge, 0, 0); です。
_  GPIOとの接続部分で重要です。他の表示装置も同様に信号を伝えます。
_  ここでは、loop 内で行なっていますが、割り込みで行う方法もあります。

//=====================================================================
void loop() {
  lv_task_handler(); delay(5);
  
  if(millis() - lastMillis > 20 ){
    lastMillis = millis();
    pointer = pointer + inc;
    if ( pointer > 100 ){ inc = -1;}
    if ( pointer <   1 ){ inc =  1;}
  //pointer = analogRead(adc1_ch7);       // Read GPIO 35 
    lv_gauge_set_value(gauge, 0, pointer);// next gauge pointer
  } 
}
//=====================================================================

 


.
displayの設定:決まりの部分です。これで表示が可能になります。

// Initialize the display =============================================
void Initialize_the_display(){
  lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10);
  lv_disp_drv_t disp_drv;
  lv_disp_drv_init(&disp_drv);
  disp_drv.hor_res  = screenWidth;
  disp_drv.ver_res  = screenHeight;
  disp_drv.flush_cb = my_disp_flush;
  disp_drv.buffer   = &disp_buf;
  lv_disp_drv_register(&disp_drv);
}
//=====================================================================

// Display flushing ===================================================
void my_disp_flush(
  lv_disp_drv_t *disp,const lv_area_t *area,lv_color_t *color_p){
  uint32_t w = (area->x2 - area->x1 + 1);
  uint32_t h = (area->y2 - area->y1 + 1);
  M5.Lcd.startWrite();
  M5.Lcd.setAddrWindow(area->x1, area->y1, w, h);
  M5.Lcd.pushColors(&color_p->full, w*h, true);
  M5.Lcd.endWrite();
  lv_disp_flush_ready(disp);
}
//=====================================================================

 


.
setup:セットアップ
_ 最初は M5Stackの設定です。
_ ESP32にBUGがあり GPIO39(A Button) を使用する時の回避策があります。
_ gauge = lv_gauge_create(lv_scr_act(), NULL); で、gauge を用意します。
_ 宣言部の static lv_obj_t * gauge; と繋がっています。
_ gauge のサイズや位置、色を設定します。位置はセンターを中心に行うと良いです。
_  理由は、サイズの異なる Display を使用する時に相対的位置で変換が容易になります。
_ lv_gauge_set_value(gauge, 0, 0); // value は、GPIO等の信号を接続する部分です。
_  guage に信号が繋がり guage が動作します。
_ Create a gauge の部分に対し LVGL は多彩な命令が用意されています。
_  多彩な命令を使用すると、lv_demo_widgetsの様に見事な表示が出来る様になります。

//=====================================================================
void setup() {
  M5.begin(true, true, true, true); // LCD,SD,Serial,I2C
  M5.Lcd.setRotation(1);
  M5.Lcd.fillScreen(TFT_BLUE);
//pinMode(adc1_ch7,INPUT);
  adc_power_acquire();     // ADC Power ON, A Button error prevention
  // WiFi.Begin(); WiFi.setSleep(false); // A Button error prevention
  lv_init();
  Initialize_the_display();
  //-------------------------------------------------------------------

  // Create a gauge ---------------------------------------------------
  static lv_color_t needle_colors[1];
  needle_colors[0] = LV_COLOR_BLUE;
  gauge = lv_gauge_create(lv_scr_act(), NULL);
  lv_gauge_set_needle_count(gauge, 1, needle_colors);
  lv_obj_set_size(gauge, 230, 230);
  lv_obj_align(gauge, NULL, LV_ALIGN_CENTER, 0, 0);
  lv_gauge_set_value(gauge, 0, 0); // value
 //-------------------------------------------------------------------
}
//=====================================================================

 



.
LINEMETER;linemeter 設定部分のリストです。
DownLoad:LVGL_LineMeter_M5Stack.zip:DL後 pdfを削除しzipを解凍します。


2. linemeter と言う objetを 宣言。( static lv_obj_t * linemeter;:全体で使用する時は最初に宣言をする )
3. objet ( linemeter ) の幅を 260 に設定。objet は 白い円です。
4. objet ( linemeter ) の縦を 220 に設定。
5. linemeter の Scaleを 270 から 100 に設定。下側が欠けた円で 画像の向きと角度になります。
6. linemeter の Rangeを 0 から 100 に設定。
7. objet に対し linemeterの 位置X を 50 に設定。
8. objet に対し linemeterの 位置Y を 10 に設定。
9. linemeter の 針(pointer) を 0 に設定。 0 に値を入力すると 針(pointer) が変化します。
10. objet ( linemeter ) に Text文字を表示します。
* objet と linemeterの 設定をする事により 多彩な表示ができます。
* ( ) 内のパラメーターを変える事により 表示が変化します。
* lv_linemeter_set_value の中の 0 で外部とのデーターが接続され、表示ができます。

// Create an linemeter ----------------------------------------------
linemeter = lv_linemeter_create(lv_scr_act(), NULL);
lv_obj_set_width_fit(linemeter, 260);
lv_obj_set_height(linemeter, 220);
lv_linemeter_set_scale(linemeter, 270, 100);
lv_linemeter_set_range(linemeter, 0, 100);
lv_obj_set_x(linemeter, 50);
lv_obj_set_y(linemeter, 10);
lv_linemeter_set_value(linemeter, 0); // value
lv_obj_set_style_local_value_str(linemeter, LV_ARC_PART_BG, 
                                 LV_STATE_DEFAULT, "macsbug");
//-------------------------------------------------------------------

 



.
BAR;bar 設定部分のリストです。
DownLoad:LVGL_bar_M5Stack.zip:DL後 pdfを削除しzipを解凍します。

// Create an bar ---------------------------------------------------
bar = lv_bar_create(lv_scr_act(), NULL);
lv_obj_set_size(bar, 300, 20);
lv_linemeter_set_scale(bar, 0, 100);
lv_linemeter_set_range(bar, 0, 100);
lv_obj_set_x(bar, 10);
lv_obj_set_y(bar, 100);
lv_bar_set_value(bar, 50, LV_ANIM_ON);
//lv_obj_set_style_local_value_str(bar, LV_ARC_PART_BG, 
//                                 LV_STATE_DEFAULT, "macsbug");
//-------------------------------------------------------------------

 



.
CHART;chart 設定部分のリストです。
DownLoad:LVGL_chart_M5Stack.zip:DL後 pdfを削除しzipを解凍します。

// Create a chart ---------------------------------------------------
chart = lv_chart_create(lv_scr_act(), NULL);
lv_obj_set_size(   chart, screenWidth -20, screenHeight -20); // size
lv_obj_align(      chart, NULL, LV_ALIGN_CENTER, 0, 0);
lv_chart_set_type( chart, LV_CHART_TYPE_LINE);//Show lines and points
lv_chart_set_range(chart, 0, 100);  // y axis
ser1 = lv_chart_add_series(chart,LV_COLOR_RED);//Add two data series
lv_chart_set_next( chart, ser1, 0); // val
//-------------------------------------------------------------------

 



.
CHART;LovyanLGFX で高速化

M5Stack M5Stack + LGFX

.
DownLoad:LVGL_chart_LGFX_M5Stack.zip:DL後 pdfを削除しzipを解凍します。
chart 設定部分のリストです。
_ 宣言の 2から6行目までを記載しますと LovyanGFX が可能です。
_ static LGFX tft; を宣言し Display は tft で動作します。

メモ:事前に LovyanGFXの 基本的な使い方 をお読み下さい。
メモ:LGFXは進化し、LGFX_AUTODETECT が必要な場合やそうでない場面があります。
_   ここでは LGFX Developer ver を使用しています。
メモ:M5以外のDisplayを使用する時は、LGFXの基本的な使い方で宣言を行ない動作しています。
_   画素数の多い 3.5″ 320×480 では、LVGXの効果が さらに出てきます。
_   M5やESP2で Arduino用 8bit Paralle Displayを使用すると高速で表示します。
_   LGFXは 8bit Paralleに匹敵する高速を実現しています。

#pragma GCC optimize ("Ofast")
#define LGFX_AUTODETECT
#define LGFX_USE_V1
#include <lvgl.h>
#include <LovyanGFX.hpp>
static LGFX tft;
int screenWidth  = 320;
int screenHeight = 240;
#define LVGL_TICK_PERIOD 30
#include <Ticker.h>
Ticker tick;
static lv_disp_buf_t disp_buf;
static lv_color_t buf[LV_HOR_RES_MAX * 10];

lv_obj_t * chart;
lv_chart_series_t * ser1;
uint32_t period = 200;  // y-axis time
uint32_t lastMillis = 0, pointer = 0, inc = 1;
int adc1_ch7 = 35; // GPIO 35 Input

 
chartの背景を少し黒くして見易くしました。lv_style_set_bg_color

// Create a chart ---------------------------------------------------
chart = lv_chart_create(lv_scr_act(), NULL);
lv_obj_set_size(   chart, screenWidth - 0, screenHeight - 0); // size
lv_obj_align(      chart, NULL, LV_ALIGN_CENTER, 0, 0);
lv_chart_set_type( chart, LV_CHART_TYPE_LINE);//Show lines and points
lv_chart_set_range(chart, 0, 100);  // y axis
ser1 = lv_chart_add_series(chart,LV_COLOR_RED);//Add two data series
lv_chart_set_next( chart, ser1, 0); // val
static lv_style_t st; lv_style_init(&st);
lv_style_set_bg_color(&st,LV_STATE_DEFAULT,lv_color_hex(0xB1B1B1));
lv_obj_add_style(chart, LV_OBJ_PART_MAIN, &st); // Backgroud color
//-------------------------------------------------------------------

 



.
感想;
LVGL は、多くの Display を網羅し、例えばサイズの異なる Display も表示が可能です。

画面スクロール機能があり 画面サイズを超えた表示も可能です。つまり、仮想空間が可能です。
小さな画面の M5Stack , Core2 でも、画面をスクロールし、広く使用する事が可能です。

M5Stackは、画面が小さい為に表示の分かり易さが制限されます。
見やすくする為に、1画面1つの表示にしました。

 


.
.
.

M5Stack , LVGL , LittlVGL , GUAGE , LINERMETER , BAR , CHART ,

Written by macsbug

7月 3, 2021 at 4:53 am

カテゴリー: ESP32, M5STACK