本チュートリアルで使用するメインコントローラデバイスは CoreS3 と Unit EXT.IO2 です。この IO 拡張ユニットは I2C 通信方式を採用しています。実際の回路接続に応じてプログラム内のピン定義を修正してください。デバイス接続後、対応する通信 IO は G1 (SDA)
と G2 (SCL)
です。
アナログ ADC 入力ピン
#include <M5Unified.h>
#include "M5_EXTIO2.h"
M5_EXTIO2 extio;
void setup() {
M5.begin();
Serial.begin(115200);
M5.Display.fillScreen(WHITE);
M5.Display.setTextColor(BLACK);
M5.Display.setTextFont(&fonts::FreeMonoBold9pt7b);
M5.Display.setCursor(0, 0);
while (!extio.begin(&Wire, 2, 1,
0x45)) {
Serial.println("extio Connect Error");
M5.Display.println("extio Connect Error");
delay(100);
}
extio.setAllPinMode(ADC_INPUT_MODE); // Set all pins to ADC input mode.
}
char info[50];
void loop() {
M5.Display.fillScreen(WHITE);
M5.Display.setCursor(0, 0);
M5.Display.println("ADC INPUT MODE");
M5.Display.println("FW VERSION: " + String(extio.getVersion()));
for (uint8_t i = 0; i < 8; i++) {
uint16_t adc =
extio.getAnalogInput(i, _12bit); // Get ADC value. 获取ADC值
Serial.printf("CH:%d ADC: %d", i, adc);
M5.Display.fillRect(0, i * 20 + 40, 200, 15, WHITE);
M5.Display.setCursor(0, i * 20 + 40);
M5.Display.printf("CH:%d ADC: %d", i, adc);
}
vTaskDelay(1000);
}
#include <M5Unified.h>
#include "M5_EXTIO2.h"
M5_EXTIO2 extio;
extio_io_mode_t mode = DIGITAL_OUTPUT_MODE;
void btnTask(void *pvParameters) {
while (1) {
if (M5.BtnA.wasPressed()) {
if (mode == DIGITAL_INPUT_MODE) {
mode = DIGITAL_OUTPUT_MODE;
} else {
mode = DIGITAL_INPUT_MODE;
}
}
M5.update();
vTaskDelay(80);
}
}
void setup() {
M5.begin();
Serial.begin(115200);
M5.Display.fillScreen(WHITE);
M5.Display.setTextColor(BLACK);
M5.Display.setTextFont(&fonts::FreeMonoBold9pt7b);
M5.Display.setCursor(0, 0);
while (!extio.begin(&Wire, 2, 1, 0x45)) {
Serial.println("extio Connect Error");
M5.Display.println("extio Connect Error");
delay(100);
}
extio.setAllPinMode(
DIGITAL_OUTPUT_MODE);
xTaskCreatePinnedToCore(btnTask, "btnTask",
4096,
NULL,
1 ,
NULL, 0);
}
char info[50];
void loop() {
if (mode == DIGITAL_INPUT_MODE) {
M5.Display.fillScreen(WHITE);
M5.Display.setCursor(0, 0);
M5.Display.println("DIGITAL INPUT MODE");
M5.Display.println("FW VERSION: " + String(extio.getVersion()));
for (uint8_t i = 0; i < 8; i++) {
if (extio.getDigitalInput(i)) {
M5.Display.fillRect(i * 30 + 30, 145, 28, 30, WHITE);
} else {
M5.Display.fillRect(i * 30 + 30, 145, 28, 30, WHITE);
}
}
} else if (mode == DIGITAL_OUTPUT_MODE) {
M5.Display.fillScreen(WHITE);
M5.Display.setCursor(0, 0);
M5.Display.println("DIGITAL OUTPUT MODE");
M5.Display.printf("FW VERSION: %s",String(extio.getVersion()));
for (uint8_t i = 0; i < 8; i++) {
extio.setDigitalOutput(i, HIGH);
M5.Display.fillRect(i * 30 + 30, 145, 28, 30, BLACK);
M5.Display.setCursor(i * 30 + 30, 145);
vTaskDelay(100);
}
for (uint8_t i = 0; i < 8; i++) {
extio.setDigitalOutput(i, LOW);
M5.Display.fillRect(i * 30 + 30, 145, 28, 30, BLACK);
M5.Display.setCursor(i * 30 + 30, 145);
vTaskDelay(100);
}
}
extio.setAllPinMode(mode);
vTaskDelay(100);
}
#include <M5Unified.h>
#include "M5_EXTIO2.h"
M5_EXTIO2 extio;
extio_io_mode_t mode = DIGITAL_OUTPUT_MODE;
void btnTask(void *pvParameters) {
while (1) {
if (M5.BtnA.wasPressed()) {
if (mode == DIGITAL_INPUT_MODE) {
mode = DIGITAL_OUTPUT_MODE;
} else {
mode = DIGITAL_INPUT_MODE;
}
}
M5.update();
vTaskDelay(80);
}
}
void setup() {
M5.begin();
Serial.begin(115200);
M5.Display.fillScreen(WHITE);
M5.Display.setTextColor(BLACK);
M5.Display.setTextFont(&fonts::FreeMonoBold9pt7b);
M5.Display.setCursor(0, 0);
while (!extio.begin(&Wire, 2, 1, 0x45)) {
Serial.println("extio Connect Error");
M5.Display.println("extio Connect Error");
delay(100);
}
extio.setAllPinMode(
DIGITAL_OUTPUT_MODE);
xTaskCreatePinnedToCore(btnTask, "btnTask",
4096,
NULL,
1 ,
NULL, 0);
}
char info[50];
void loop() {
M5.Display.fillScreen(WHITE);
M5.Display.setCursor(0, 0);
M5.Display.println("DIGITAL INPUT MODE");
M5.Display.println("FW VERSION: " + String(extio.getVersion()));
extio.setDigitalOutput(0, HIGH);
M5.Display.println("Set Pin_0 level to high");
M5.Display.printf("Pin_1 level is %s",(String)extio.getDigitalInput(1));
extio.setAllPinMode(mode);
vTaskDelay(100);
}
#include <M5Unified.h>
#include "M5_EXTIO2.h"
M5_EXTIO2 extio;
void setup() {
M5.begin();
Serial.begin(115200);
M5.Display.fillScreen(WHITE);
M5.Display.setTextColor(BLACK);
M5.Display.setTextFont(&fonts::FreeMonoBold9pt7b);
M5.Display.setCursor(0, 0);
while (!extio.begin(&Wire, 2, 1, 0x45)) {
Serial.println("extio Connect Error");
M5.Display.println("extio Connect Error");
delay(100);
}
extio.setAllPinMode(SERVO_CTL_MODE);
}
char info[50];
void loop() {
M5.Display.fillScreen(WHITE);
M5.Display.setCursor(0, 0);
M5.Display.println("SERVO CTL MODE");
M5.Display.printf("FW VERSION: %s", String(extio.getVersion()));
for (uint8_t deg = 0; deg <= 180; deg += 45) {
for (uint8_t i = 0; i < 8; i++) {
extio.setServoAngle(i, deg);
Serial.printf("CH:%d DEG: %d", i, deg);
M5.Display.fillRect(0, i * 20, 200, i * 20 + 20, WHITE);
M5.Display.setCursor(0, i * 20);
M5.Display.printf("CH:%d DEG: %d", i, deg);
}
vTaskDelay(500);
}
for (int pulse = 500; pulse <= 2500; pulse += 100) {
for (uint8_t i = 0; i < 8; i++) {
extio.setServoPulse(i, pulse);
Serial.printf("CH:%d P: %d", i, pulse);
M5.Display.fillRect(0, i * 20, 200, i * 20 + 20, WHITE);
M5.Display.setCursor(0, i * 20);
M5.Display.printf("CH:%d P: %d", i, pulse);
}
vTaskDelay(500);
}
delay(100);
}
ダウンロードモード:デバイスによってプログラム書き込み前にダウンロードモードに入る必要があります。この手順はメインコントローラによって異なる場合があります。詳細はArduino IDE入門チュートリアルページ下部のデバイスプログラミングチュートリアルリストを参照してください。
CoreS3 の場合:リセットボタンを約 2 秒間長押しし、内部の緑色 LED が点灯したら離します。これでデバイスはダウンロードモードに入り、書き込みを待機します。