Skip to content

Commit a458df8

Browse files
committed
add board WiFi Slot
1 parent 144152c commit a458df8

File tree

5 files changed

+363
-0
lines changed

5 files changed

+363
-0
lines changed

boards.txt

+180
Original file line numberDiff line numberDiff line change
@@ -4245,3 +4245,183 @@ wifiduino.menu.UploadSpeed.460800.upload.speed=460800
42454245
wifiduino.menu.UploadSpeed.512000.windows=512000
42464246
wifiduino.menu.UploadSpeed.512000.upload.speed=512000
42474247

4248+
##############################################################
4249+
wifi_slot.name=WiFi Slot
4250+
4251+
wifi_slot.upload.tool=esptool
4252+
wifi_slot.upload.speed=115200
4253+
wifi_slot.upload.resetmethod=nodemcu
4254+
wifi_slot.upload.maximum_size=434160
4255+
wifi_slot.upload.maximum_data_size=81920
4256+
wifi_slot.upload.wait_for_upload_port=true
4257+
wifi_slot.serial.disableDTR=true
4258+
wifi_slot.serial.disableRTS=true
4259+
4260+
wifi_slot.build.mcu=esp8266
4261+
wifi_slot.build.f_cpu=80000000L
4262+
wifi_slot.build.board=ESP8266_ESP12
4263+
wifi_slot.build.core=esp8266
4264+
wifi_slot.build.variant=wifi_slot
4265+
wifi_slot.build.flash_mode=dout
4266+
wifi_slot.build.spiffs_pagesize=256
4267+
wifi_slot.build.debug_port=
4268+
wifi_slot.build.debug_level=
4269+
4270+
wifi_slot.menu.CpuFrequency.80=80 MHz
4271+
wifi_slot.menu.CpuFrequency.80.build.f_cpu=80000000L
4272+
wifi_slot.menu.CpuFrequency.160=160 MHz
4273+
wifi_slot.menu.CpuFrequency.160.build.f_cpu=160000000L
4274+
4275+
wifi_slot.menu.FlashFreq.40=40MHz
4276+
wifi_slot.menu.FlashFreq.40.build.flash_freq=40
4277+
wifi_slot.menu.FlashFreq.80=80MHz
4278+
wifi_slot.menu.FlashFreq.80.build.flash_freq=80
4279+
4280+
wifi_slot.menu.FlashMode.dout=DOUT
4281+
wifi_slot.menu.FlashMode.dout.build.flash_mode=dout
4282+
wifi_slot.menu.FlashMode.dio=DIO
4283+
wifi_slot.menu.FlashMode.dio.build.flash_mode=dio
4284+
wifi_slot.menu.FlashMode.qio=QIO
4285+
wifi_slot.menu.FlashMode.qio.build.flash_mode=qio
4286+
wifi_slot.menu.FlashMode.qout=QOUT
4287+
wifi_slot.menu.FlashMode.qout.build.flash_mode=qout
4288+
4289+
wifi_slot.menu.UploadSpeed.115200=115200
4290+
wifi_slot.menu.UploadSpeed.115200.upload.speed=115200
4291+
wifi_slot.menu.UploadSpeed.9600=9600
4292+
wifi_slot.menu.UploadSpeed.9600.upload.speed=9600
4293+
wifi_slot.menu.UploadSpeed.57600=57600
4294+
wifi_slot.menu.UploadSpeed.57600.upload.speed=57600
4295+
wifi_slot.menu.UploadSpeed.256000.windows=256000
4296+
wifi_slot.menu.UploadSpeed.256000.upload.speed=256000
4297+
wifi_slot.menu.UploadSpeed.230400.linux=230400
4298+
wifi_slot.menu.UploadSpeed.230400.macosx=230400
4299+
wifi_slot.menu.UploadSpeed.230400.upload.speed=230400
4300+
wifi_slot.menu.UploadSpeed.460800.linux=460800
4301+
wifi_slot.menu.UploadSpeed.460800.macosx=460800
4302+
wifi_slot.menu.UploadSpeed.460800.upload.speed=460800
4303+
wifi_slot.menu.UploadSpeed.512000.windows=512000
4304+
wifi_slot.menu.UploadSpeed.512000.upload.speed=512000
4305+
wifi_slot.menu.UploadSpeed.921600=921600
4306+
wifi_slot.menu.UploadSpeed.921600.upload.speed=921600
4307+
4308+
wifi_slot.menu.FlashSize.1M64=1M (64K SPIFFS)
4309+
wifi_slot.menu.FlashSize.1M64.build.flash_size=1M
4310+
wifi_slot.menu.FlashSize.1M64.build.flash_ld=eagle.flash.1m64.ld
4311+
wifi_slot.menu.FlashSize.1M64.build.spiffs_start=0xEB000
4312+
wifi_slot.menu.FlashSize.1M64.build.spiffs_end=0xFB000
4313+
wifi_slot.menu.FlashSize.1M64.build.spiffs_blocksize=4096
4314+
wifi_slot.menu.FlashSize.1M64.upload.maximum_size=958448
4315+
4316+
wifi_slot.menu.FlashSize.1M128=1M (128K SPIFFS)
4317+
wifi_slot.menu.FlashSize.1M128.build.flash_size=1M
4318+
wifi_slot.menu.FlashSize.1M128.build.flash_ld=eagle.flash.1m128.ld
4319+
wifi_slot.menu.FlashSize.1M128.build.spiffs_start=0xDB000
4320+
wifi_slot.menu.FlashSize.1M128.build.spiffs_end=0xFB000
4321+
wifi_slot.menu.FlashSize.1M128.build.spiffs_blocksize=4096
4322+
wifi_slot.menu.FlashSize.1M128.upload.maximum_size=892912
4323+
4324+
wifi_slot.menu.FlashSize.1M144=1M (144K SPIFFS)
4325+
wifi_slot.menu.FlashSize.1M144.build.flash_size=1M
4326+
wifi_slot.menu.FlashSize.1M144.build.flash_ld=eagle.flash.1m144.ld
4327+
wifi_slot.menu.FlashSize.1M144.build.spiffs_start=0xD7000
4328+
wifi_slot.menu.FlashSize.1M144.build.spiffs_end=0xFB000
4329+
wifi_slot.menu.FlashSize.1M144.build.spiffs_blocksize=4096
4330+
wifi_slot.menu.FlashSize.1M144.upload.maximum_size=876528
4331+
4332+
wifi_slot.menu.FlashSize.1M160=1M (160K SPIFFS)
4333+
wifi_slot.menu.FlashSize.1M160.build.flash_size=1M
4334+
wifi_slot.menu.FlashSize.1M160.build.flash_ld=eagle.flash.1m160.ld
4335+
wifi_slot.menu.FlashSize.1M160.build.spiffs_start=0xD3000
4336+
wifi_slot.menu.FlashSize.1M160.build.spiffs_end=0xFB000
4337+
wifi_slot.menu.FlashSize.1M160.build.spiffs_blocksize=4096
4338+
wifi_slot.menu.FlashSize.1M160.upload.maximum_size=860144
4339+
4340+
wifi_slot.menu.FlashSize.1M192=1M (192K SPIFFS)
4341+
wifi_slot.menu.FlashSize.1M192.build.flash_size=1M
4342+
wifi_slot.menu.FlashSize.1M192.build.flash_ld=eagle.flash.1m192.ld
4343+
wifi_slot.menu.FlashSize.1M192.build.spiffs_start=0xCB000
4344+
wifi_slot.menu.FlashSize.1M192.build.spiffs_end=0xFB000
4345+
wifi_slot.menu.FlashSize.1M192.build.spiffs_blocksize=4096
4346+
wifi_slot.menu.FlashSize.1M192.upload.maximum_size=827376
4347+
4348+
wifi_slot.menu.FlashSize.1M256=1M (256K SPIFFS)
4349+
wifi_slot.menu.FlashSize.1M256.build.flash_size=1M
4350+
wifi_slot.menu.FlashSize.1M256.build.flash_ld=eagle.flash.1m256.ld
4351+
wifi_slot.menu.FlashSize.1M256.build.spiffs_start=0xBB000
4352+
wifi_slot.menu.FlashSize.1M256.build.spiffs_end=0xFB000
4353+
wifi_slot.menu.FlashSize.1M256.build.spiffs_blocksize=4096
4354+
wifi_slot.menu.FlashSize.1M256.upload.maximum_size=761840
4355+
4356+
wifi_slot.menu.FlashSize.1M512=1M (512K SPIFFS)
4357+
wifi_slot.menu.FlashSize.1M512.build.flash_size=1M
4358+
wifi_slot.menu.FlashSize.1M512.build.flash_ld=eagle.flash.1m512.ld
4359+
wifi_slot.menu.FlashSize.1M512.build.spiffs_start=0x7B000
4360+
wifi_slot.menu.FlashSize.1M512.build.spiffs_end=0xFB000
4361+
wifi_slot.menu.FlashSize.1M512.build.spiffs_blocksize=8192
4362+
wifi_slot.menu.FlashSize.1M512.upload.maximum_size=499696
4363+
4364+
wifi_slot.menu.FlashSize.2M=2M (1M SPIFFS)
4365+
wifi_slot.menu.FlashSize.2M.build.flash_size=2M
4366+
wifi_slot.menu.FlashSize.2M.build.flash_ld=eagle.flash.2m.ld
4367+
wifi_slot.menu.FlashSize.2M.build.spiffs_start=0x100000
4368+
wifi_slot.menu.FlashSize.2M.build.spiffs_end=0x1FB000
4369+
wifi_slot.menu.FlashSize.2M.build.spiffs_blocksize=8192
4370+
wifi_slot.menu.FlashSize.2M.upload.maximum_size=1044464
4371+
4372+
wifi_slot.menu.FlashSize.4M1M=4M (1M SPIFFS)
4373+
wifi_slot.menu.FlashSize.4M1M.build.flash_size=4M
4374+
wifi_slot.menu.FlashSize.4M1M.build.flash_ld=eagle.flash.4m1m.ld
4375+
wifi_slot.menu.FlashSize.4M1M.build.spiffs_start=0x300000
4376+
wifi_slot.menu.FlashSize.4M1M.build.spiffs_end=0x3FB000
4377+
wifi_slot.menu.FlashSize.4M1M.build.spiffs_blocksize=8192
4378+
wifi_slot.menu.FlashSize.4M1M.build.spiffs_pagesize=256
4379+
wifi_slot.menu.FlashSize.4M1M.upload.maximum_size=1044464
4380+
4381+
wifi_slot.menu.FlashSize.4M3M=4M (3M SPIFFS)
4382+
wifi_slot.menu.FlashSize.4M3M.build.flash_size=4M
4383+
wifi_slot.menu.FlashSize.4M3M.build.flash_ld=eagle.flash.4m.ld
4384+
wifi_slot.menu.FlashSize.4M3M.build.spiffs_start=0x100000
4385+
wifi_slot.menu.FlashSize.4M3M.build.spiffs_end=0x3FB000
4386+
wifi_slot.menu.FlashSize.4M3M.build.spiffs_blocksize=8192
4387+
wifi_slot.menu.FlashSize.4M3M.upload.maximum_size=1044464
4388+
4389+
wifi_slot.menu.Debug.Disabled=Disabled
4390+
wifi_slot.menu.Debug.Disabled.build.debug_port=
4391+
wifi_slot.menu.Debug.Serial=Serial
4392+
wifi_slot.menu.Debug.Serial.build.debug_port=-DDEBUG_ESP_PORT=Serial
4393+
wifi_slot.menu.Debug.Serial1=Serial1
4394+
wifi_slot.menu.Debug.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
4395+
4396+
wifi_slot.menu.DebugLevel.None____=None
4397+
wifi_slot.menu.DebugLevel.None____.build.debug_level=
4398+
wifi_slot.menu.DebugLevel.Core____=Core
4399+
wifi_slot.menu.DebugLevel.Core____.build.debug_level=-DDEBUG_ESP_CORE
4400+
wifi_slot.menu.DebugLevel.SSL_____=Core + SSL
4401+
wifi_slot.menu.DebugLevel.SSL_____.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL
4402+
wifi_slot.menu.DebugLevel.SSL_MEM_=Core + SSL + TLS Mem
4403+
wifi_slot.menu.DebugLevel.SSL_MEM_.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_TLS_MEM
4404+
wifi_slot.menu.DebugLevel.WiFic___=Core + WiFi
4405+
wifi_slot.menu.DebugLevel.WiFic___.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI
4406+
wifi_slot.menu.DebugLevel.WiFi____=WiFi
4407+
wifi_slot.menu.DebugLevel.WiFi____.build.debug_level=-DDEBUG_ESP_WIFI
4408+
wifi_slot.menu.DebugLevel.HTTPClient=HTTPClient
4409+
wifi_slot.menu.DebugLevel.HTTPClient.build.debug_level=-DDEBUG_ESP_HTTP_CLIENT
4410+
wifi_slot.menu.DebugLevel.HTTPClient2=HTTPClient + SSL
4411+
wifi_slot.menu.DebugLevel.HTTPClient2.build.debug_level=-DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_SSL
4412+
wifi_slot.menu.DebugLevel.HTTPUpdate=HTTPUpdate
4413+
wifi_slot.menu.DebugLevel.HTTPUpdate.build.debug_level=-DDEBUG_ESP_HTTP_UPDATE
4414+
wifi_slot.menu.DebugLevel.HTTPUpdate2=HTTPClient + HTTPUpdate
4415+
wifi_slot.menu.DebugLevel.HTTPUpdate2.build.debug_level=-DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_UPDATE
4416+
wifi_slot.menu.DebugLevel.HTTPUpdate3=HTTPClient + HTTPUpdate + Updater
4417+
wifi_slot.menu.DebugLevel.HTTPUpdate3.build.debug_level=-DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER
4418+
wifi_slot.menu.DebugLevel.HTTPServer=HTTPServer
4419+
wifi_slot.menu.DebugLevel.HTTPServer.build.debug_level=-DDEBUG_ESP_HTTP_SERVER
4420+
wifi_slot.menu.DebugLevel.UPDATER=Updater
4421+
wifi_slot.menu.DebugLevel.UPDATER.build.debug_level=-DDEBUG_ESP_UPDATER
4422+
wifi_slot.menu.DebugLevel.OTA_____=OTA
4423+
wifi_slot.menu.DebugLevel.OTA_____.build.debug_level=-DDEBUG_ESP_OTA
4424+
wifi_slot.menu.DebugLevel.OTA2____=OTA + Updater
4425+
wifi_slot.menu.DebugLevel.OTA2____.build.debug_level=-DDEBUG_ESP_OTA -DDEBUG_ESP_UPDATER
4426+
wifi_slot.menu.DebugLevel.all_____=All
4427+
wifi_slot.menu.DebugLevel.all_____.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_TLS_MEM

doc/boards.rst

+4
Original file line numberDiff line numberDiff line change
@@ -389,3 +389,7 @@ WiFiduino
389389

390390
Product page: https://wifiduino.com/esp8266
391391

392+
WiFi Slot
393+
---------
394+
395+
Product page: http://wiki.amperka.ru/wifi-slot

package/package_esp8266com_index.template.json

+3
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@
9494
},
9595
{
9696
"name": "WiFiduino"
97+
},
98+
{
99+
"name": "WiFi Slot"
97100
}
98101
],
99102
"toolsDependencies": [

variants/wifi_slot/analogRead.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include "wiring_private.h"
2+
#include "pins_arduino.h"
3+
4+
extern "C" int __analogRead(uint8_t pin);
5+
6+
extern "C" int analogRead(uint8_t pin) {
7+
8+
static uint8_t currentAin = 0;
9+
10+
delay(0);
11+
if (pin >= ANALOG_INPUT_HARDWARE) {
12+
return 0;
13+
}
14+
uint8_t ain = analog_pin_to_mux_channel[pin];
15+
if (ain == (uint8_t)NOT_A_PIN) {
16+
return 0;
17+
}
18+
if (currentAin > ain) {
19+
for (int i = 0; i < (8 - currentAin); ++i)
20+
{
21+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
22+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
23+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
24+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
25+
}
26+
currentAin = 0;
27+
}
28+
for (int i = currentAin; i < ain; ++i)
29+
{
30+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
31+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
32+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
33+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
34+
}
35+
currentAin = ain;
36+
return __analogRead(ANALOG_INPUT_HARDWARE);
37+
38+
}
39+
40+
void initVariant() {
41+
// we need to reset analog mux. When ANALOG_INPUT_SELECTOR_PIN is high
42+
// on ~0.4 ms, mux channel is becoming 0.
43+
// Mux channel is swithing on back \_ front. But there is no switching
44+
// - rc reset is still high when ANALOG_INPUT_SELECTOR_PIN became low
45+
uint16_t resetDelay = 777;
46+
pinMode(ANALOG_INPUT_SELECTOR_PIN, OUTPUT);
47+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
48+
delayMicroseconds(resetDelay);
49+
digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
50+
delayMicroseconds(resetDelay);
51+
}

variants/wifi_slot/pins_arduino.h

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/*
2+
pins_arduino.h - Pin definition functions for Arduino
3+
Part of Arduino - http://www.arduino.cc/
4+
5+
Copyright (c) 2007 David A. Mellis
6+
Modified for ESP8266 WIFIO board by Ivan Grokhotkov, 2015.
7+
8+
This library is free software; you can redistribute it and/or
9+
modify it under the terms of the GNU Lesser General Public
10+
License as published by the Free Software Foundation; either
11+
version 2.1 of the License, or (at your option) any later version.
12+
13+
This library is distributed in the hope that it will be useful,
14+
but WITHOUT ANY WARRANTY; without even the implied warranty of
15+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16+
Lesser General Public License for more details.
17+
18+
You should have received a copy of the GNU Lesser General
19+
Public License along with this library; if not, write to the
20+
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21+
Boston, MA 02111-1307 USA
22+
23+
Changed : 24.11.2017 Vasily Basalaev
24+
Definition for WiFi Slot
25+
Amperka LLC
26+
http://amperka.ru
27+
28+
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
29+
*/
30+
31+
#ifndef Pins_Arduino_h
32+
#define Pins_Arduino_h
33+
34+
#define EXTERNAL_NUM_INTERRUPTS 16
35+
#define NUM_DIGITAL_PINS 17
36+
#define NUM_ANALOG_INPUTS 1
37+
38+
// TODO: this should be <= 9 if flash is in DIO mode
39+
#define isFlashInterfacePin(p) ((p) >= 6 && (p) <= 11)
40+
41+
#define analogInputToDigitalPin(p) ((p > 0) ? NOT_A_PIN : 0)
42+
#define digitalPinToInterrupt(p) (((p) < EXTERNAL_NUM_INTERRUPTS)? (p) : NOT_AN_INTERRUPT)
43+
#define digitalPinHasPWM(p) (((p) < NUM_DIGITAL_PINS && !isFlashInterfacePin(p))? 1 : 0)
44+
45+
#define PIN_SPI_SS (15)
46+
#define PIN_SPI_MOSI (13)
47+
#define PIN_SPI_MISO (12)
48+
#define PIN_SPI_SCK (14)
49+
50+
static const uint8_t SS = PIN_SPI_SS;
51+
static const uint8_t MOSI = PIN_SPI_MOSI;
52+
static const uint8_t MISO = PIN_SPI_MISO;
53+
static const uint8_t SCK = PIN_SPI_SCK;
54+
55+
#define PIN_WIRE_SDA (2)
56+
#define PIN_WIRE_SCL (0)
57+
58+
static const uint8_t SDA = PIN_WIRE_SDA;
59+
static const uint8_t SCL = PIN_WIRE_SCL;
60+
61+
#define PIN_A0 (3)
62+
#define PIN_A1 (1)
63+
#define PIN_A2 (16)
64+
#define PIN_A3 (13)
65+
#define PIN_A4 (5)
66+
#define PIN_A5 (14)
67+
#define PIN_A6 (4)
68+
#define PIN_A7 (12)
69+
70+
static const uint8_t A0 = PIN_A0;
71+
static const uint8_t A1 = PIN_A1;
72+
static const uint8_t A2 = PIN_A2;
73+
static const uint8_t A3 = PIN_A3;
74+
static const uint8_t A4 = PIN_A4;
75+
static const uint8_t A5 = PIN_A5;
76+
static const uint8_t A6 = PIN_A6;
77+
static const uint8_t A7 = PIN_A7;
78+
79+
static const uint8_t LED_BUILTIN = 2;
80+
static const uint8_t BUILTIN_LED = 2;
81+
82+
static const uint8_t ANALOG_INPUT_SELECTOR_PIN = 15;
83+
static const uint8_t ANALOG_INPUT_HARDWARE = 17;
84+
85+
static const uint8_t analog_pin_to_mux_channel[] = {
86+
(uint8_t)NOT_A_PIN // 0
87+
, 1 // 1
88+
, (uint8_t)NOT_A_PIN // 2
89+
, 0 // 3
90+
, 6 // 4
91+
, 4 // 5
92+
, (uint8_t)NOT_A_PIN // 6
93+
, (uint8_t)NOT_A_PIN // 7
94+
, (uint8_t)NOT_A_PIN // 8
95+
, (uint8_t)NOT_A_PIN // 9
96+
, (uint8_t)NOT_A_PIN // 10
97+
, (uint8_t)NOT_A_PIN // 11
98+
, 7 // 12
99+
, 3 // 13
100+
, 5 // 14
101+
, (uint8_t)NOT_A_PIN // 15
102+
, 2 // 16
103+
};
104+
105+
// These serial port names are intended to allow libraries and architecture-neutral
106+
// sketches to automatically default to the correct port name for a particular type
107+
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
108+
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
109+
//
110+
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
111+
//
112+
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
113+
//
114+
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
115+
//
116+
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
117+
//
118+
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
119+
// pins are NOT connected to anything by default.
120+
#define SERIAL_PORT_MONITOR Serial
121+
#define SERIAL_PORT_USBVIRTUAL Serial
122+
#define SERIAL_PORT_HARDWARE Serial
123+
#define SERIAL_PORT_HARDWARE_OPEN Serial
124+
125+
#endif /* Pins_Arduino_h */

0 commit comments

Comments
 (0)