いよいよ、令和8年4月1日から、自転車の一定の交通違反に交通反則通告制度を導入すること等を内容とする「道路交通法の一部を改正する法律」(令和6年法律第34号)が施行され、自転車の交通違反で検挙された後の手続が大きく変わります。
そこで、自転車も車両の仲間として、交通ルールの遵守を図るため、16歳以上の者による自転車の一定の交通違反に対して、青切符を導入することとなりました。自転車への青切符の導入により、自動車と同様に、手続的な負担を軽減するとともに、違反者に前科がつくことをなくしつつ、実効性のある責任追及が可能となります。今後、違反の実情に即して、自転車の一層の安全な利用のための指導警告や、青切符、赤切符等による処理が行われます。
改正に伴い、特に「携帯電話使用等(保持)」に注意が必要で、携帯電話を使用していなくても、保持しているだけで、青切符の反則金(12,000円)となります。
また、左側通行の原則(自転車は基本的に道路の左側端に寄って通行)もより厳しくなります。
M M5_Atomシリーズ(5) 〜AtomS3Rでカラー画像の表示
by fjk
AtomS3RはAtomS3にPSRAM(8MB)を追加した物で、IMUはAtomS3とは構成が異なります。PSRAM(Pseudo Static RAM)は、外部インターフェースは SRAM のように見え、内部には DRAM セルが用いられています。大量のデータ処理や外部メモリが必要なアプリケーションにおいて非常に有用です。(参考)
AtomS3はRAMメモリが少なく、大きなデータをRAM格納できませんが、AtomS3RのPSRAMがあれば画像データを作業用としてRAMに格納することができます。
そして、SPIFFS(SPI Flash File System)のAPIを使うことで、このPSRAMにファイルを保存し、必要な時にデータの読み・書きができます。(SPIFFSの使い方)
そこで、「画面に任意の画像を表示する方法」を参考(といってもほぼそのまま)に、BMP画像データをAtomS3Rに表示してみました。
- 【表示画像の作成とAtomS3Rに書き込む】
- @ 表示する画像は、abc916の方法で、128×128dot(16ビット5-6-5)のBMPファイル(rose.bmp等)を作製。
- A プロジェクトを右クリック。「新しいフォルダー」を選択し、「data」フォルダーを作る。
- B dataフォルダを右クリック、「エクスプローラで表示する」を選択。作製したBMPファイルをdataフォルダにコピー。
- C 左側PlatfoormIOのメニューからProject Tasksを開く
- D [Build Filesystem Image]をクリックしてフォーマットをした後に[Upload Filesystem Image]をクリックすることで [data]フォルダ内に保存されているデータが書き込まれます。

新しいフォルダー作製 |

エクスプローラで表示 |

ファイルシステム作製 |

データの書込 |

Platformio.ini |

AtomS3RにBMP画像を表示 |
M5シリーズでM5Unifiedを使う場合は、SPIFFSライブラリーは以下の記述だけで使用できます。
#include <SPIFFS.h>
M5Unifiedを使用しない場合は、platformio.iniに以下の記述が必要です。
board_build.filesystem = spiffs
SPIFFSファイルから画像を表示するM5GFXのアプリ関数の例は、
- PNG:
- drawPngFile(SPIFFS,file,x,y);
- JPG:
- drawJpgFile(SPIFFS,file,x,y);
- BMP:
- drawBmpFile(SPIFFS,file,x,y);
|
| ▼AtomS3R_bmp.cpp(zip)
|
|
/***********************************************************
* AtomS3_bmp Test
**********************************************************/
#include <SPIFFS.h>
#include <M5Unified.h>
M5Canvas canvas(&M5.Display);
// ===== ユーザーが変えるのはここだけ =====
static const char* IMAGE_PATH = "/rose.bmp";
// SPIFFS内の画像パス
static const uint8_t BRIGHTNESS = 128;
// 画面の明るさ(0-255)
// ====================================
static void die(const char* msg) {
// 画面にエラー表示して停止
M5.Display.clear(TFT_BLACK);
M5.Display.setTextSize(2);
M5.Display.setTextColor(TFT_WHITE);
M5.Display.setCursor(0, 0);
M5.Display.println(msg);
while (true) { delay(100); }
}
void setup() {
// SPIFFS.format(); //フォーマットが必要なら実行
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setBrightness(BRIGHTNESS);
M5.Display.clear(TFT_BLACK);
// 1) SPIFFSをマウント
if (!SPIFFS.begin(true)) {
die("SPIFFS mount failed");
}
// 2) ファイル存在チェック
if (!SPIFFS.exists(IMAGE_PATH)) {
String s = "File not found:\n";
s += IMAGE_PATH;
die(s.c_str());
}
// 3) ちらつき防止:スプライトに描いてから一発表示
canvas.createSprite(M5.Display.width(), M5.Display.height());
canvas.fillSprite(TFT_BLACK);
// BMPを描画(JPGなら drawJpgFile、PNGなら drawPngFile)
canvas.drawBmpFile(SPIFFS, IMAGE_PATH, 0, 0);
canvas.pushSprite(0, 0);
canvas.deleteSprite(); // 1回表示なら解放してOK
}
void loop() {
// 画像を1回表示するだけなら何もしない
}
|
<参考> フラッシュメモリのパーティションのデフォルトサイズは4MB(default.csv、変更可能)
| # Name | Type | SubType | Offset | Size |
| nvs | data | nvs | 0x9000 | 0x5000 |
| otadata | data | ota | 0xe000 | 0x2000 |
| app0 | app | ota_0 | 0x10000 | 0x140000 |
| app1 | app | ota_1 | 0x150000 | 0x140000 |
| spiffs | data | spiffs | 0x290000 | 0x160000 |
| coredump | data | coredump | 0x3F0000 | 0x10000 |
- ◇「spiffs」はファイル単位でデータを管理できるがディレクトリフォルダーが作れない。最近は「fat」が推奨されている。
参考
- ◇ パーテションテーブルのサンプル
【おまけ】
- ● 主なM5Atomシリーズの比較

※プログラムのリストをハイライト無しのスタイルで見る場合はここをクリック
※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。