denko 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/build_avr.yml +2 -4
- data/.github/workflows/build_esp32.yml +2 -3
- data/.github/workflows/build_esp8266.yml +2 -3
- data/.github/workflows/build_megaavr.yml +2 -4
- data/.github/workflows/build_ra4m1.yml +57 -0
- data/.github/workflows/build_rp2040.yml +2 -4
- data/.github/workflows/build_sam3x.yml +1 -3
- data/.github/workflows/build_samd.yml +2 -4
- data/CHANGELOG.md +60 -0
- data/DEPS_CLI.md +8 -6
- data/DEPS_IDE.md +9 -7
- data/HARDWARE.md +98 -75
- data/README.md +48 -59
- data/benchmarks/i2c_ssd1306_refresh.rb +74 -0
- data/examples/analog_io/ads1115.rb +57 -0
- data/examples/analog_io/ads1118.rb +8 -9
- data/examples/analog_io/dac_loopback.rb +6 -4
- data/examples/analog_io/input.rb +39 -36
- data/examples/connection/tcp.rb +1 -1
- data/examples/display/hd44780.rb +3 -3
- data/examples/display/ssd1306.rb +1 -1
- data/examples/pulse_io/buzzer.rb +40 -0
- data/examples/sensor/aht20.rb +1 -1
- data/lib/denko/analog_io/ads1115.rb +61 -0
- data/lib/denko/analog_io/ads1118.rb +10 -120
- data/lib/denko/analog_io/ads111x.rb +123 -0
- data/lib/denko/analog_io/output.rb +2 -1
- data/lib/denko/analog_io.rb +2 -0
- data/lib/denko/behaviors/bus_peripheral_addressed.rb +1 -1
- data/lib/denko/behaviors/component.rb +1 -1
- data/lib/denko/behaviors/input_pin.rb +3 -0
- data/lib/denko/behaviors/reader.rb +14 -13
- data/lib/denko/behaviors/single_pin.rb +1 -3
- data/lib/denko/behaviors/state.rb +1 -0
- data/lib/denko/behaviors/subcomponents.rb +2 -2
- data/lib/denko/board/core.rb +1 -1
- data/lib/denko/board/i2c.rb +1 -4
- data/lib/denko/board/map.rb +9 -0
- data/lib/denko/board/servo.rb +2 -6
- data/lib/denko/board.rb +32 -20
- data/lib/denko/connection/board_uart.rb +3 -3
- data/lib/denko/connection/flow_control.rb +10 -2
- data/lib/denko/digital_io/output.rb +1 -1
- data/lib/denko/display/hd44780.rb +18 -18
- data/lib/denko/led/seven_segment.rb +18 -19
- data/lib/denko/message.rb +6 -14
- data/lib/denko/one_wire/bus.rb +1 -1
- data/lib/denko/one_wire/{bus_enumeration.rb → bus_enumerator.rb} +16 -8
- data/lib/denko/one_wire/helper.rb +1 -1
- data/lib/denko/one_wire.rb +1 -1
- data/lib/denko/pulse_io/ir_transmitter.rb +1 -2
- data/lib/denko/sensor/ds18b20.rb +1 -1
- data/lib/denko/version.rb +1 -1
- data/lib/denko_cli/packages.rb +7 -1
- data/lib/denko_cli/targets.rb +8 -5
- data/lib/denko_cli/usage.txt +8 -4
- data/src/denko_ethernet.ino +15 -23
- data/src/denko_serial.ino +3 -14
- data/src/denko_wifi.ino +35 -50
- data/src/lib/Denko.cpp +23 -6
- data/src/lib/Denko.h +6 -16
- data/src/lib/DenkoCoreIO.cpp +3 -3
- data/src/lib/DenkoDefines.h +62 -16
- data/src/lib/DenkoEEPROM.cpp +9 -1
- data/src/lib/DenkoI2C.cpp +11 -9
- data/src/lib/DenkoLEDArray.cpp +1 -1
- data/target.yml +35 -1
- data/test/behaviors/reader_test.rb +8 -1
- data/test/board/helper_test.rb +0 -4
- data/test/display/hd44780_test.rb +10 -0
- data/test/led/seven_segment_test.rb +30 -8
- data/test/one_wire/bus_enumerator_test.rb +4 -0
- data/test/one_wire/helper_test.rb +5 -5
- data/test/sensor/ds18b20_test.rb +10 -0
- data/test/test_helper.rb +17 -2
- data/vendor/board-maps/.gitmodules +3 -0
- data/vendor/board-maps/BoardMap.h +40 -12
- data/vendor/board-maps/README.md +1 -0
- data/vendor/board-maps/lib/header_parser.rb +30 -5
- data/vendor/board-maps/run.rb +11 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +6 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +6 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +5 -1
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +20 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +2 -1
- data/vendor/board-maps/yaml/ARTRONSHOP_RP2_NANO.yml +32 -0
- data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +1 -1
- data/vendor/board-maps/yaml/AVR_ESPLORA.yml +1 -1
- data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LEONARDO.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +1 -1
- data/vendor/board-maps/yaml/AVR_MICRO.yml +1 -1
- data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +1 -1
- data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +1 -1
- data/vendor/board-maps/yaml/AVR_YUN.yml +1 -1
- data/vendor/board-maps/yaml/AVR_YUNMINI.yml +1 -1
- data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +11 -1
- data/vendor/board-maps/yaml/BeeMotionS3.yml +6 -1
- data/vendor/board-maps/yaml/Bee_Motion.yml +3 -0
- data/vendor/board-maps/yaml/Bee_S3.yml +1 -1
- data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI6_BLE_RP2040.yml +42 -0
- data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +4 -1
- data/vendor/board-maps/yaml/CoreESP32.yml +5 -1
- data/vendor/board-maps/yaml/D1_MINI32.yml +10 -1
- data/vendor/board-maps/yaml/DENKY.yml +10 -1
- data/vendor/board-maps/yaml/DENKY_PICOV3.yml +10 -1
- data/vendor/board-maps/yaml/DENKY_WROOM32.yml +10 -1
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +6 -1
- data/vendor/board-maps/yaml/DPU_ESP32.yml +10 -1
- data/vendor/board-maps/yaml/D_Duino_32.yml +9 -1
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +11 -1
- data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +11 -1
- data/vendor/board-maps/yaml/ESP32S2_USB.yml +11 -1
- data/vendor/board-maps/yaml/ESP32_DEV.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_PICO.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +4 -1
- data/vendor/board-maps/yaml/ESP32_THING.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +4 -1
- data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +4 -1
- data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +10 -1
- data/vendor/board-maps/yaml/ESPECTRO32.yml +10 -1
- data/vendor/board-maps/yaml/ESPea32.yml +10 -1
- data/vendor/board-maps/yaml/ESPino32.yml +10 -1
- data/vendor/board-maps/yaml/FEATHERS2.yml +11 -1
- data/vendor/board-maps/yaml/FEATHERS2NEO.yml +2 -1
- data/vendor/board-maps/yaml/FEATHERS3.yml +3 -0
- data/vendor/board-maps/yaml/FEATHER_ESP32.yml +5 -1
- data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +11 -1
- data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +11 -1
- data/vendor/board-maps/yaml/FROG_ESP32.yml +10 -1
- data/vendor/board-maps/yaml/HEALTHYPI_4.yml +10 -1
- data/vendor/board-maps/yaml/HONEYLEMON.yml +10 -1
- data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +10 -1
- data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +4 -1
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +5 -1
- data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +7 -1
- data/vendor/board-maps/yaml/LOLIN32.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN32_LITE.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN_D32.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +11 -1
- data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +11 -1
- data/vendor/board-maps/yaml/LOLIN_S3.yml +9 -1
- data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +9 -1
- data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +9 -1
- data/vendor/board-maps/yaml/LoPy.yml +11 -1
- data/vendor/board-maps/yaml/LoPy4.yml +11 -1
- data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +11 -1
- data/vendor/board-maps/yaml/METRO_ESP32S2.yml +11 -1
- data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +10 -1
- data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +10 -1
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +10 -1
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +10 -1
- data/vendor/board-maps/yaml/MICROS2.yml +11 -1
- data/vendor/board-maps/yaml/MINIMA.yml +15 -0
- data/vendor/board-maps/yaml/NANO32.yml +10 -1
- data/vendor/board-maps/yaml/Node32s.yml +10 -1
- data/vendor/board-maps/yaml/NodeMCU_32S.yml +10 -1
- data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +11 -1
- data/vendor/board-maps/yaml/PIMORONI_PLASMA2040.yml +29 -0
- data/vendor/board-maps/yaml/PORTENTA_C33.yml +28 -0
- data/vendor/board-maps/yaml/PROS3.yml +6 -1
- data/vendor/board-maps/yaml/PYCOM_GPY.yml +11 -1
- data/vendor/board-maps/yaml/Piranha.yml +7 -1
- data/vendor/board-maps/yaml/Pocket32.yml +10 -1
- data/vendor/board-maps/yaml/QUANTUM.yml +10 -1
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +11 -1
- data/vendor/board-maps/yaml/RMP.yml +11 -1
- data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +0 -1
- data/vendor/board-maps/yaml/SAM_DUE.yml +3 -1
- data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +10 -1
- data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +11 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +6 -1
- data/vendor/board-maps/yaml/TBeam.yml +6 -1
- data/vendor/board-maps/yaml/TINYPICO.yml +10 -1
- data/vendor/board-maps/yaml/TINYS2.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_T1.yml +10 -1
- data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +10 -1
- data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +10 -1
- data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +0 -1
- data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +0 -1
- data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +0 -1
- data/vendor/board-maps/yaml/TWATCH_BASE.yml +0 -1
- data/vendor/board-maps/yaml/TWatch.yml +0 -1
- data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +10 -1
- data/vendor/board-maps/yaml/UNOWIFIR4.yml +17 -0
- data/vendor/board-maps/yaml/WIPY3.yml +11 -1
- data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +2 -1
- data/vendor/board-maps/yaml/connaxio_espoir.yml +7 -1
- data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +11 -1
- data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +11 -1
- data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +11 -1
- data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wireless_stick.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +10 -1
- data/vendor/board-maps/yaml/openkb.yml +11 -1
- data/vendor/board-maps/yaml/roboheart_hercules.yml +10 -1
- data/vendor/board-maps/yaml/sensesiot_weizen.yml +10 -1
- data/vendor/board-maps/yaml/uPesy_WROOM.yml +10 -1
- data/vendor/board-maps/yaml/uPesy_WROVER.yml +10 -1
- data/vendor/board-maps/yaml/unphone8.yml +11 -1
- data/vendor/board-maps/yaml/unphone9.yml +11 -1
- metadata +15 -3
data/lib/denko_cli/usage.txt
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
|
2
2
|
Usage:
|
3
|
+
|
3
4
|
denko task [options]
|
4
5
|
|
5
6
|
Tasks:
|
7
|
+
|
6
8
|
sketch SKETCH [options]
|
7
9
|
help
|
8
10
|
targets
|
@@ -12,23 +14,25 @@
|
|
12
14
|
--target TARGET (default: mega. Run 'denko targets' for more info)
|
13
15
|
--debug (default: off)
|
14
16
|
|
15
|
-
Available sketches and
|
17
|
+
Available sketches and options specific to each sketch:
|
16
18
|
|
17
19
|
serial
|
18
|
-
--baud BAUD
|
20
|
+
--baud BAUD (default: 115200)
|
19
21
|
|
20
22
|
ethernet
|
21
23
|
--mac XX:XX:XX:XX:XX:XX (required)
|
22
24
|
--ip XXX.XXX.XXX.XXX (required, no DHCP)
|
23
25
|
--port PORT (default: 3466)
|
26
|
+
--baud BAUD (default: 115200, serial fallback)
|
24
27
|
|
25
28
|
wifi
|
26
29
|
--ssid SSID (required)
|
27
30
|
--password PASSWORD (required)
|
28
31
|
--port PORT (default: 3466)
|
32
|
+
--baud BAUD (default: 115200, serial fallback)
|
29
33
|
|
30
34
|
Examples:
|
31
35
|
|
32
36
|
denko sketch ethernet --mac 12:34:56:78:90:12 --ip 192.168.1.2
|
33
|
-
denko sketch serial
|
34
|
-
denko sketch serial
|
37
|
+
denko sketch serial --baud 57600 --target esp32
|
38
|
+
denko sketch serial --baud 9600 --target core
|
data/src/denko_ethernet.ino
CHANGED
@@ -2,17 +2,6 @@
|
|
2
2
|
#include <SPI.h>
|
3
3
|
#include <Ethernet.h>
|
4
4
|
|
5
|
-
// Define 'serial' as the serial interface to use.
|
6
|
-
// Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
|
7
|
-
// On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
|
8
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
9
|
-
#define serial SerialUSB
|
10
|
-
// Use this for Programming USB port (right) on Due and Zero.
|
11
|
-
// #define serial Serial
|
12
|
-
#else
|
13
|
-
#define serial Serial
|
14
|
-
#endif
|
15
|
-
|
16
5
|
// Configure your MAC address, IP address, and HTTP port here.
|
17
6
|
byte mac[] = { 0xDE, 0xAD, 0xBE, 0x30, 0x31, 0x32 };
|
18
7
|
IPAddress ip(192,168,0,77);
|
@@ -31,8 +20,8 @@ void printEthernetStatus() {
|
|
31
20
|
|
32
21
|
void setup() {
|
33
22
|
// Wait for serial ready.
|
34
|
-
|
35
|
-
while(!
|
23
|
+
DENKO_SERIAL_IF.begin(115200);
|
24
|
+
while(!DENKO_SERIAL_IF);
|
36
25
|
|
37
26
|
// Explicitly disable the SD card.
|
38
27
|
pinMode(4,OUTPUT);
|
@@ -41,9 +30,7 @@ void setup() {
|
|
41
30
|
// Start up the network connection and server.
|
42
31
|
Ethernet.begin(mac, ip);
|
43
32
|
server.begin();
|
44
|
-
|
45
|
-
printEthernetStatus();
|
46
|
-
#endif
|
33
|
+
printEthernetStatus();
|
47
34
|
|
48
35
|
// Add listener callbacks for local logic.
|
49
36
|
denko.digitalListenCallback = onDigitalListen;
|
@@ -51,20 +38,25 @@ void setup() {
|
|
51
38
|
}
|
52
39
|
|
53
40
|
void loop() {
|
41
|
+
// End connection if client disconnects.
|
42
|
+
if (client && !client.connected()) {
|
43
|
+
client.stop();
|
44
|
+
}
|
45
|
+
|
54
46
|
// Allow one client at a time to be connected. Set it as the denko IO stream.
|
55
47
|
if (!client){
|
56
48
|
client = server.available();
|
57
|
-
if (client)
|
49
|
+
if (client) {
|
50
|
+
// TCP Client
|
51
|
+
denko.stream = &client;
|
52
|
+
} else {
|
53
|
+
// Serial fallback
|
54
|
+
denko.stream = &DENKO_SERIAL_IF;
|
55
|
+
}
|
58
56
|
}
|
59
57
|
|
60
58
|
// Main loop of the denko library.
|
61
59
|
denko.run();
|
62
|
-
|
63
|
-
// End the connection when client disconnects and revert to serial IO.
|
64
|
-
if (client && !client.connected()){
|
65
|
-
client.stop();
|
66
|
-
denko.stream = &serial;
|
67
|
-
}
|
68
60
|
}
|
69
61
|
|
70
62
|
// This runs every time a digital pin that denko is listening to changes value.
|
data/src/denko_serial.ino
CHANGED
@@ -2,24 +2,13 @@
|
|
2
2
|
|
3
3
|
Denko denko;
|
4
4
|
|
5
|
-
// Define 'serial' as the serial interface to use.
|
6
|
-
// Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
|
7
|
-
// On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
|
8
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
9
|
-
#define serial SerialUSB
|
10
|
-
// Use this for Programming USB port (right) on Due and Zero.
|
11
|
-
// #define serial Serial
|
12
|
-
#else
|
13
|
-
#define serial Serial
|
14
|
-
#endif
|
15
|
-
|
16
5
|
void setup() {
|
17
6
|
// Wait for serial ready.
|
18
|
-
|
19
|
-
while(!
|
7
|
+
DENKO_SERIAL_IF.begin(115200);
|
8
|
+
while(!DENKO_SERIAL_IF);
|
20
9
|
|
21
10
|
// Pass serial stream to denko so it can read/write.
|
22
|
-
denko.stream = &
|
11
|
+
denko.stream = &DENKO_SERIAL_IF;
|
23
12
|
|
24
13
|
// Add listener callbacks for local logic.
|
25
14
|
denko.digitalListenCallback = onDigitalListen;
|
data/src/denko_wifi.ino
CHANGED
@@ -17,18 +17,6 @@
|
|
17
17
|
#define WIFI_STATUS_LED 13
|
18
18
|
#endif
|
19
19
|
|
20
|
-
|
21
|
-
// Define 'serial' as the serial interface to use.
|
22
|
-
// Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
|
23
|
-
// On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
|
24
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
25
|
-
#define serial SerialUSB
|
26
|
-
// Use this for Programming USB port (right) on Due and Zero.
|
27
|
-
// #define serial Serial
|
28
|
-
#else
|
29
|
-
#define serial Serial
|
30
|
-
#endif
|
31
|
-
|
32
20
|
// Configure your WiFi options here. IP address is not configurable. Uses DHCP.
|
33
21
|
int port = 3466;
|
34
22
|
char* ssid = "yourNetwork";
|
@@ -50,16 +38,16 @@ void indicateWiFi(byte value) {
|
|
50
38
|
}
|
51
39
|
|
52
40
|
void printWifiStatus() {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
41
|
+
DENKO_SERIAL_IF.println("WiFi Connected");
|
42
|
+
DENKO_SERIAL_IF.print("SSID: ");
|
43
|
+
DENKO_SERIAL_IF.println(WiFi.SSID());
|
44
|
+
DENKO_SERIAL_IF.print("Signal Strength (RSSI):");
|
45
|
+
DENKO_SERIAL_IF.print(WiFi.RSSI());
|
46
|
+
DENKO_SERIAL_IF.println(" dBm");
|
47
|
+
DENKO_SERIAL_IF.print("IP Address: ");
|
48
|
+
DENKO_SERIAL_IF.println(WiFi.localIP());
|
49
|
+
DENKO_SERIAL_IF.print("Denko TCP Port: ");
|
50
|
+
DENKO_SERIAL_IF.println(port);
|
63
51
|
indicateWiFi(true);
|
64
52
|
}
|
65
53
|
|
@@ -70,37 +58,29 @@ void connect(){
|
|
70
58
|
#endif
|
71
59
|
|
72
60
|
// Try to connect.
|
73
|
-
|
61
|
+
DENKO_SERIAL_IF.print("Connecting to WiFi ");
|
74
62
|
WiFi.begin(ssid, pass);
|
75
63
|
|
76
64
|
// Delay until connected.
|
77
65
|
while (WiFi.status() != WL_CONNECTED) {
|
78
66
|
delay(500);
|
79
|
-
|
67
|
+
DENKO_SERIAL_IF.print(".");
|
80
68
|
}
|
81
69
|
connected = true;
|
70
|
+
printWifiStatus();
|
82
71
|
}
|
83
72
|
|
84
73
|
void maintainWiFi(){
|
85
|
-
if (
|
86
|
-
if (WiFi.status() == WL_CONNECTED) return;
|
74
|
+
if (WiFi.status() != WL_CONNECTED) {
|
87
75
|
connected = false;
|
88
76
|
connect();
|
89
77
|
}
|
90
|
-
if (connected == false){
|
91
|
-
if (WiFi.status() != WL_CONNECTED) {
|
92
|
-
connect();
|
93
|
-
return;
|
94
|
-
}
|
95
|
-
connected = true;
|
96
|
-
printWifiStatus();
|
97
|
-
}
|
98
78
|
}
|
99
79
|
|
100
80
|
void setup() {
|
101
81
|
// Wait for serial ready.
|
102
|
-
|
103
|
-
while(!
|
82
|
+
DENKO_SERIAL_IF.begin(115200);
|
83
|
+
while(!DENKO_SERIAL_IF);
|
104
84
|
|
105
85
|
// Enable over the air updates on the ESP8266.
|
106
86
|
#if defined(ESP8266)
|
@@ -117,33 +97,38 @@ void setup() {
|
|
117
97
|
denko.digitalListenCallback = onDigitalListen;
|
118
98
|
denko.analogListenCallback = onAnalogListen;
|
119
99
|
|
120
|
-
// Use
|
121
|
-
denko.stream = &
|
100
|
+
// Use DENKO_SERIAL_IF as the denko IO stream until we get a TCP connection.
|
101
|
+
denko.stream = &DENKO_SERIAL_IF;
|
122
102
|
}
|
123
103
|
|
124
104
|
void loop() {
|
125
105
|
// Reconnect if we've lost WiFi.
|
126
106
|
maintainWiFi();
|
127
107
|
|
108
|
+
// Handle OTA updates.
|
109
|
+
#if defined(ESP8266)
|
110
|
+
ArduinoOTA.handle();
|
111
|
+
#endif
|
112
|
+
|
113
|
+
// End connection if client disconnects.
|
114
|
+
if (client && !client.connected()) {
|
115
|
+
client.stop();
|
116
|
+
}
|
117
|
+
|
128
118
|
// Allow one client at a time to be connected. Set it as the denko IO stream.
|
129
119
|
if (!client){
|
130
120
|
client = server.available();
|
131
|
-
if (client)
|
121
|
+
if (client) {
|
122
|
+
// TCP Client
|
123
|
+
denko.stream = &client;
|
124
|
+
} else {
|
125
|
+
// Serial fallback
|
126
|
+
denko.stream = &DENKO_SERIAL_IF;
|
127
|
+
}
|
132
128
|
}
|
133
129
|
|
134
130
|
// Main loop of the denko library.
|
135
131
|
denko.run();
|
136
|
-
|
137
|
-
// End the connection when client disconnects and revert to serial IO.
|
138
|
-
if (client && !client.connected()){
|
139
|
-
client.stop();
|
140
|
-
denko.stream = &serial;
|
141
|
-
}
|
142
|
-
|
143
|
-
// Handle OTA updates.
|
144
|
-
#if defined(ESP8266)
|
145
|
-
ArduinoOTA.handle();
|
146
|
-
#endif
|
147
132
|
}
|
148
133
|
|
149
134
|
// This runs every time a digital pin that denko is listening to changes value.
|
data/src/lib/Denko.cpp
CHANGED
@@ -36,7 +36,7 @@ void Denko::run(){
|
|
36
36
|
parse(stream->read());
|
37
37
|
rxBytes ++;
|
38
38
|
// Acknowledge when we've received half as many bytes as the serial buffer.
|
39
|
-
if (rxBytes >=
|
39
|
+
if (rxBytes >= DENKO_RX_ACK_INTERVAL) rxNotify();
|
40
40
|
}
|
41
41
|
|
42
42
|
#ifdef DENKO_UARTS
|
@@ -113,7 +113,7 @@ void Denko::process() {
|
|
113
113
|
case 6: setListener (pin, val, auxMsg[0], auxMsg[1], false); break;
|
114
114
|
|
115
115
|
// Implemented in DenkoEEPROM.cpp
|
116
|
-
#ifdef
|
116
|
+
#ifdef DENKO_EEPROM
|
117
117
|
case 7: eepromRead (); break;
|
118
118
|
case 8: eepromWrite (); break;
|
119
119
|
#endif
|
@@ -198,6 +198,7 @@ void Denko::process() {
|
|
198
198
|
case 90: handshake (); break;
|
199
199
|
case 91: resetState (); break;
|
200
200
|
case 92: sendReady (); break;
|
201
|
+
case 93: enumerate (); break;
|
201
202
|
case 95: setRegisterDivider (); break;
|
202
203
|
case 96: setAnalogWriteResolution (); break;
|
203
204
|
case 97: setAnalogReadResolution (); break;
|
@@ -262,19 +263,27 @@ void Denko::handshake() {
|
|
262
263
|
#ifdef DENKO_VERSION
|
263
264
|
stream->print(DENKO_VERSION);
|
264
265
|
#endif
|
266
|
+
|
267
|
+
// Third is serial buffer size.
|
268
|
+
stream->print(',');
|
269
|
+
stream->print(DENKO_SERIAL_BUFFER_SIZE);
|
265
270
|
|
266
|
-
//
|
271
|
+
// Fourth is AUX_SIZE.
|
267
272
|
stream->print(',');
|
268
273
|
stream->print(AUX_SIZE);
|
269
274
|
|
270
|
-
//
|
275
|
+
// Fifth is EEPROM size. None on Due or Zero.
|
271
276
|
stream->print(',');
|
272
277
|
#if defined(EEPROM_EMULATED)
|
273
278
|
stream->print(EMULATED_EEPROM_LENGTH);
|
274
279
|
#elif defined(EEPROM_PRESENT)
|
275
280
|
stream->print(EEPROM.length());
|
276
|
-
#
|
277
|
-
|
281
|
+
#endif
|
282
|
+
|
283
|
+
// Sixth is I2C buffer size.
|
284
|
+
stream->print(',');
|
285
|
+
#ifdef DENKO_I2C
|
286
|
+
stream->print(DENKO_I2C_BUFFER_SIZE);
|
278
287
|
#endif
|
279
288
|
|
280
289
|
// End
|
@@ -297,6 +306,14 @@ void Denko::resetState() {
|
|
297
306
|
lastTime = micros();
|
298
307
|
}
|
299
308
|
|
309
|
+
// CMD = 93
|
310
|
+
void Denko::enumerate() {
|
311
|
+
stream->print("ENUMERATION:");
|
312
|
+
#ifdef A0
|
313
|
+
stream->println(A0);
|
314
|
+
#endif
|
315
|
+
}
|
316
|
+
|
300
317
|
// CMD = 95
|
301
318
|
// Set the register read divider. Powers of 2 up to 128 are valid.
|
302
319
|
void Denko::setRegisterDivider() {
|
data/src/lib/Denko.h
CHANGED
@@ -154,6 +154,8 @@ class Denko {
|
|
154
154
|
void spiClearListeners ();
|
155
155
|
|
156
156
|
// I2C
|
157
|
+
bool i2cStarted = false;
|
158
|
+
byte i2cSpeed = 0;
|
157
159
|
void i2cBegin ();
|
158
160
|
void i2cEnd ();
|
159
161
|
void i2cSetSpeed (uint8_t code);
|
@@ -175,6 +177,7 @@ class Denko {
|
|
175
177
|
//
|
176
178
|
void handshake (); //cmd = 90
|
177
179
|
void resetState (); //cmd = 91
|
180
|
+
void enumerate (); //cmd = 92
|
178
181
|
void setRegisterDivider (); //cmd = 97
|
179
182
|
void setAnalogWriteResolution (); //cmd = 96
|
180
183
|
void setAnalogReadResolution (); //cmd = 97
|
@@ -205,30 +208,17 @@ class Denko {
|
|
205
208
|
//
|
206
209
|
// Flow control stuff.
|
207
210
|
//
|
208
|
-
// Notify
|
209
|
-
//
|
211
|
+
// Notify computer that board has received bytes.
|
210
212
|
void rxNotify();
|
211
213
|
uint8_t rxBytes = 0;
|
212
|
-
//
|
213
|
-
// ESP32 uses a 128 byte FIFO buffer for UART Rx. Notify every 63 bytes instead of 32
|
214
|
-
// so serial over native USB performs better.
|
215
|
-
//
|
216
|
-
// Using 63 instead of 64 since the ATmega32u4 (Leonardo) is limited to 63.
|
217
|
-
//
|
218
|
-
#ifdef ESP32
|
219
|
-
uint8_t rxNotifyLimit = 63;
|
220
|
-
#else
|
221
|
-
uint8_t rxNotifyLimit = 32;
|
222
|
-
#endif
|
223
|
-
|
224
214
|
//
|
225
215
|
// Tell the computer to halt or resume sending data to the board.
|
226
216
|
//
|
227
|
-
//
|
217
|
+
// Use these if running a function on the board that disables interrupts for
|
228
218
|
// longer than a single serial character (~85us at 115,200 baud).
|
229
219
|
//
|
230
220
|
// If the function was initiated by the computer (eg. writing to a WS2812 strip), do
|
231
|
-
// not call sendHalt(). The computer should
|
221
|
+
// not call sendHalt(). The computer should halt transmission itself after sending
|
232
222
|
// the WS2812 command. Only call sendReady() after data is written out to the strip.
|
233
223
|
//
|
234
224
|
// If the function was initiated on the board (eg. New IR input triggered by an interrupt),
|
data/src/lib/DenkoCoreIO.cpp
CHANGED
@@ -27,8 +27,8 @@ void Denko::setMode(byte p, byte m) {
|
|
27
27
|
if (m != 0b100) dacDisable(p);
|
28
28
|
#endif
|
29
29
|
|
30
|
-
// On the SAMD21, mode needs to be INPUT when using the DAC.
|
31
|
-
#
|
30
|
+
// On the SAMD21 and RA4M1, mode needs to be INPUT when using the DAC.
|
31
|
+
#if defined(__SAMD21G18A__) || defined(_RENESAS_RA_)
|
32
32
|
if (m == 0b100){
|
33
33
|
pinMode(p, INPUT);
|
34
34
|
return;
|
@@ -196,7 +196,7 @@ void Denko::dacWrite(byte p, int v, boolean echo) {
|
|
196
196
|
::dacWrite(p, v);
|
197
197
|
#endif
|
198
198
|
|
199
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
199
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_)
|
200
200
|
analogWrite(p, v);
|
201
201
|
#endif
|
202
202
|
}
|
data/src/lib/DenkoDefines.h
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
#define DENKO_VERSION __VERSION__
|
9
9
|
|
10
10
|
// Uncomment these to include features beyond core features.
|
11
|
+
// #define DENKO_EEPROM
|
11
12
|
// #define DENKO_ONE_WIRE
|
12
13
|
// #define DENKO_TONE
|
13
14
|
// #define DENKO_SPI_BB
|
@@ -39,30 +40,24 @@
|
|
39
40
|
#define PIN_COUNT 22
|
40
41
|
#endif
|
41
42
|
|
42
|
-
// No EEPROM on the Due or Zero.
|
43
|
-
#if !defined(__SAM3X8E__) && !defined(__SAMD21G18A__)
|
44
|
-
#define EEPROM_PRESENT
|
45
|
-
#include <EEPROM.h>
|
46
|
-
#endif
|
47
|
-
|
48
|
-
// Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
|
49
|
-
#if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
50
|
-
# define EEPROM_EMULATED
|
51
|
-
# define EMULATED_EEPROM_LENGTH 512
|
52
|
-
#endif
|
53
|
-
|
54
43
|
// Figure out how many LEDC channels are available on ESP32 boards.
|
55
44
|
#ifdef ESP32
|
56
|
-
#
|
45
|
+
#if CONFIG_IDF_TARGET_ESP32
|
46
|
+
#define LEDC_CHANNEL_COUNT 16
|
47
|
+
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
48
|
+
#define LEDC_CHANNEL_COUNT 8
|
49
|
+
#elif CONFIG_IDF_TARGET_ESP32C3
|
50
|
+
#define LEDC_CHANNEL_COUNT 6
|
51
|
+
#endif
|
57
52
|
#endif
|
58
53
|
|
59
54
|
// Filter for boards that can set their analog write resolution.
|
60
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
|
55
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
|
61
56
|
#define WRITE_RESOLUTION_SETTER
|
62
57
|
#endif
|
63
58
|
|
64
59
|
// Filter for boards that can set their analog read resolution.
|
65
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
60
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
66
61
|
#define READ_RESOLUTION_SETTER
|
67
62
|
#endif
|
68
63
|
|
@@ -88,7 +83,7 @@
|
|
88
83
|
#elif defined(ESP8266) && defined(SERIAL_PORT_HARDWARE_OPEN)
|
89
84
|
#define DENKO_UARTS 1
|
90
85
|
|
91
|
-
// This works for all the Atmel cores.
|
86
|
+
// This works for all the Atmel cores except RA4M1.
|
92
87
|
#else
|
93
88
|
#if defined(SERIAL_PORT_HARDWARE3)
|
94
89
|
#define DENKO_UARTS 3
|
@@ -114,3 +109,54 @@
|
|
114
109
|
#else
|
115
110
|
#define AUX_SIZE 272
|
116
111
|
#endif
|
112
|
+
|
113
|
+
// Define 'DENKO_SERIAL_IF' as the serial interface to use.
|
114
|
+
// Uses SerialUSB (left port), which is native USB, on Arduino Due & Zero, or Serial otherwise.
|
115
|
+
// On many boards, eg. Arduino Leonardo, RP2040, ESP32-S3, Serial is native USB regardless.
|
116
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
117
|
+
#define DENKO_SERIAL_IF SerialUSB
|
118
|
+
#define DENKO_USB_CDC
|
119
|
+
// To use programming USB (right) on Due and Zero, comment 2 lines above, uncomment 1 line below.
|
120
|
+
// #define DENKO_SERIAL_IF Serial
|
121
|
+
#else
|
122
|
+
#define DENKO_SERIAL_IF Serial
|
123
|
+
#endif
|
124
|
+
|
125
|
+
// Figure out how much serial buffer we have, tell the computer, and set the ack interval.
|
126
|
+
// Best performance acknowledging at 64 bytes, or 32 if buffer is only 64.
|
127
|
+
//
|
128
|
+
// These are 256/64 regardless of whether native USB CDC or UART bridge.
|
129
|
+
#if defined(ARDUINO_ARCH_RP2040) || defined(ESP32) || defined(ESP8266) || defined(__SAM3X8E__)
|
130
|
+
#define DENKO_SERIAL_BUFFER_SIZE 256
|
131
|
+
#define DENKO_RX_ACK_INTERVAL 64
|
132
|
+
// RA4M1 has a 512 Serial buffer.
|
133
|
+
#elif defined(_RENESAS_RA_)
|
134
|
+
#define DENKO_SERIAL_BUFFER_SIZE 512
|
135
|
+
#define DENKO_RX_ACK_INTERVAL 64
|
136
|
+
// SAMD21 is 256/64 in native USB mode ONLY. Must use defaults on programming port to avoid data loss.
|
137
|
+
#elif defined(__SAMD21G18A__) && defined(DENKO_USB_CDC)
|
138
|
+
#define DENKO_SERIAL_BUFFER_SIZE 256
|
139
|
+
#define DENKO_RX_ACK_INTERVAL 64
|
140
|
+
// 32u4 is odd. Size is 63 instead of 64. Interval must be 31. 32 doesn't work at all. Off by 1 errors?
|
141
|
+
#elif defined(__AVR_ATmega32U4__)
|
142
|
+
#define DENKO_SERIAL_BUFFER_SIZE 63
|
143
|
+
#define DENKO_RX_ACK_INTERVAL 31
|
144
|
+
// Defaults
|
145
|
+
#else
|
146
|
+
#define DENKO_SERIAL_BUFFER_SIZE 64
|
147
|
+
#define DENKO_RX_ACK_INTERVAL 32
|
148
|
+
#endif
|
149
|
+
|
150
|
+
// Figure out how big the buffer is on the built-in Wire / I2C library.
|
151
|
+
#ifdef DENKO_I2C
|
152
|
+
// RP2040 and SAMD21 can do up to 256, but 255 since 1 byte for length.
|
153
|
+
#if defined(ARDUINO_ARCH_RP2040) || defined(__SAMD21G18A__)
|
154
|
+
#define DENKO_I2C_BUFFER_SIZE 255
|
155
|
+
// ESP32, ESP8266 and megaAVR can do up to 128.
|
156
|
+
#elif defined(ESP32) || defined(ESP8266) || defined(__AVR_ATmega4809__)
|
157
|
+
#define DENKO_I2C_BUFFER_SIZE 128
|
158
|
+
// Fall back to 32 bytes.
|
159
|
+
#else
|
160
|
+
#define DENKO_I2C_BUFFER_SIZE 32
|
161
|
+
#endif
|
162
|
+
#endif
|
data/src/lib/DenkoEEPROM.cpp
CHANGED
@@ -3,7 +3,15 @@
|
|
3
3
|
//
|
4
4
|
#include "Denko.h"
|
5
5
|
|
6
|
-
#ifdef
|
6
|
+
#ifdef DENKO_EEPROM
|
7
|
+
#include <EEPROM.h>
|
8
|
+
|
9
|
+
// Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
|
10
|
+
#if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
11
|
+
#define EEPROM_EMULATED
|
12
|
+
#define EMULATED_EEPROM_LENGTH 512
|
13
|
+
#endif
|
14
|
+
|
7
15
|
// CMD = 6
|
8
16
|
// Read from the microcontroller's EEPROM.
|
9
17
|
//
|
data/src/lib/DenkoI2C.cpp
CHANGED
@@ -6,20 +6,20 @@
|
|
6
6
|
|
7
7
|
#include <Wire.h>
|
8
8
|
|
9
|
-
bool i2cStarted = false;
|
10
|
-
|
11
9
|
// Only start the I2C interface if not already started.
|
12
10
|
// Lazy initialization in case user wants to use I2C pins for something else.
|
13
11
|
void Denko::i2cBegin() {
|
14
12
|
if (!i2cStarted) {
|
15
13
|
Wire.begin();
|
16
14
|
i2cStarted = true;
|
15
|
+
i2cSetSpeed(0);
|
17
16
|
}
|
18
17
|
}
|
19
18
|
|
20
19
|
// End the I2C interface.
|
21
20
|
// This is mostly used as a Reset in Denko::handshake.
|
22
21
|
void Denko::i2cEnd(){
|
22
|
+
i2cSetSpeed(0);
|
23
23
|
// ESP8266 core does not define Wire.end()
|
24
24
|
#ifndef ESP8266
|
25
25
|
Wire.end();
|
@@ -36,6 +36,7 @@ void Denko::i2cSetSpeed(uint8_t code) {
|
|
36
36
|
case 3: Wire.setClock(3400000); break;
|
37
37
|
default: Wire.setClock(100000); break;
|
38
38
|
}
|
39
|
+
i2cSpeed = code;
|
39
40
|
}
|
40
41
|
|
41
42
|
// CMD = 33
|
@@ -43,7 +44,8 @@ void Denko::i2cSetSpeed(uint8_t code) {
|
|
43
44
|
void Denko::i2cSearch() {
|
44
45
|
byte error;
|
45
46
|
uint8_t addr;
|
46
|
-
i2cBegin();
|
47
|
+
if (!i2cStarted) i2cBegin();
|
48
|
+
i2cSetSpeed(0);
|
47
49
|
stream->print(SDA);
|
48
50
|
|
49
51
|
// Only addresses from 0x08 to 0x77 are usable (8 to 127).
|
@@ -77,10 +79,10 @@ void Denko::i2cWrite() {
|
|
77
79
|
uint8_t dataLength = (uint8_t)val;
|
78
80
|
|
79
81
|
// Limit to 32 bytes.
|
80
|
-
if (dataLength >
|
82
|
+
if (dataLength > DENKO_I2C_BUFFER_SIZE) dataLength = DENKO_I2C_BUFFER_SIZE;
|
81
83
|
|
82
|
-
i2cBegin();
|
83
|
-
i2cSetSpeed(auxMsg[0]);
|
84
|
+
if (!i2cStarted) i2cBegin();
|
85
|
+
if (i2cSpeed != auxMsg[0]) i2cSetSpeed(auxMsg[0]);
|
84
86
|
|
85
87
|
Wire.beginTransmission(address);
|
86
88
|
Wire.write(&auxMsg[1], dataLength);
|
@@ -116,10 +118,10 @@ void Denko::i2cRead() {
|
|
116
118
|
uint8_t dataLength = (uint8_t)val;
|
117
119
|
|
118
120
|
// Limit to 32 bytes.
|
119
|
-
if (dataLength >
|
121
|
+
if (dataLength > DENKO_I2C_BUFFER_SIZE) dataLength = DENKO_I2C_BUFFER_SIZE;
|
120
122
|
|
121
|
-
i2cBegin();
|
122
|
-
i2cSetSpeed(auxMsg[0]);
|
123
|
+
if (!i2cStarted) i2cBegin();
|
124
|
+
if (i2cSpeed != auxMsg[0]) i2cSetSpeed(auxMsg[0]);
|
123
125
|
|
124
126
|
// Optionally write up to a 4 byte register address before reading.
|
125
127
|
if ((auxMsg[1] > 0) && (auxMsg[1] < 5)) {
|
data/src/lib/DenkoLEDArray.cpp
CHANGED
data/target.yml
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
# name: rp2040
|
2
|
+
# fqbn: rp2040:rp2040:rpipicow
|
3
|
+
# port: /dev/cu.usbmodem14B01
|
4
|
+
|
5
|
+
# name: mega
|
6
|
+
# fqbn: arduino:avr:uno
|
7
|
+
# ort: /dev/cu.usbmodem14B01
|
8
|
+
|
9
|
+
# name: mega
|
10
|
+
# fqbn: arduino:avr:mega
|
11
|
+
# port: /dev/cu.usbmodem14C01
|
12
|
+
|
1
13
|
name: mega
|
2
|
-
fqbn: arduino:avr:
|
14
|
+
fqbn: arduino:avr:leonardo
|
3
15
|
port: /dev/cu.usbmodem14B01
|
16
|
+
|
17
|
+
# name: esp32
|
18
|
+
# fqbn: esp32:esp32:esp32doit-devkit-v1
|
19
|
+
# port: /dev/cu.SLAB_USBtoUART
|
20
|
+
|
21
|
+
# name: esp8266
|
22
|
+
# fqbn: esp8266:esp8266:nodemcuv2
|
23
|
+
# port: /dev/cu.SLAB_USBtoUART
|
24
|
+
|
25
|
+
# name: sam3x
|
26
|
+
# fqbn: arduino:sam:arduino_due_x
|
27
|
+
# port: /dev/cu.usbmodem14C0
|
28
|
+
|
29
|
+
# name: samd
|
30
|
+
# fqbn: arduino:samd:arduino_zero_native
|
31
|
+
# port: /dev/cu.usbmodem14C01
|
32
|
+
|
33
|
+
# Native USB ESP32 shouldn't be used since this doesn't enable USB CDC on boot.
|
34
|
+
|
35
|
+
# name: esp32
|
36
|
+
# fqbn: esp32:esp32:lolin_s3
|
37
|
+
# port: /dev/cu.usbmodem14C01
|