Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
arduino-pico
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
arduino-pico
Commits
f1060351
Unverified
Commit
f1060351
authored
Dec 07, 2021
by
Pontus Oldberg
Committed by
GitHub
Dec 07, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds support for Challenger NB RP2040 WiFi board and RPICO32 module (#366)
parent
21f49d03
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1421 additions
and
0 deletions
+1421
-0
README.md
README.md
+2
-0
boards.txt
boards.txt
+974
-0
tools/makeboards.py
tools/makeboards.py
+2
-0
variants/challenger_nb_2040_wifi/ChallengerWiFi.cpp
variants/challenger_nb_2040_wifi/ChallengerWiFi.cpp
+107
-0
variants/challenger_nb_2040_wifi/ChallengerWiFi.h
variants/challenger_nb_2040_wifi/ChallengerWiFi.h
+36
-0
variants/challenger_nb_2040_wifi/pins_arduino.h
variants/challenger_nb_2040_wifi/pins_arduino.h
+75
-0
variants/ilabs_rpico32/Ilabs2040WiFiClass.cpp
variants/ilabs_rpico32/Ilabs2040WiFiClass.cpp
+107
-0
variants/ilabs_rpico32/Ilabs2040WiFiClass.h
variants/ilabs_rpico32/Ilabs2040WiFiClass.h
+36
-0
variants/ilabs_rpico32/pins_arduino.h
variants/ilabs_rpico32/pins_arduino.h
+82
-0
No files found.
README.md
View file @
f1060351
...
...
@@ -21,7 +21,9 @@ See https://arduino-pico.readthedocs.io/en/latest/ along with the examples for m
*
Cytron Maker Pi RP2040
*
Cytron Maker Nano RP2040
*
Invector Labs Challenger RP2040 WiFi
*
Invector Labs Challenger NB RP2040 WiFi
*
Invector Labs Challenger RP2040 LTE
*
Invector Labs RPICO32
*
Melopero Shake RP2040
*
SparkFun ProMicro RP2040
*
uPesy RP2040 DevKit
...
...
boards.txt
View file @
f1060351
This diff is collapsed.
Click to expand it.
tools/makeboards.py
View file @
f1060351
...
...
@@ -163,6 +163,8 @@ MakeBoard("sparkfun_promicrorp2040", "SparkFun", "ProMicro RP2040", "0x1b4f", "0
MakeBoard
(
"generic"
,
"Generic"
,
"RP2040"
,
"0x2e8a"
,
"0xf00a"
,
"GENERIC_RP2040"
,
16
,
"boot2_generic_03h_4_padded_checksum"
)
MakeBoard
(
"challenger_2040_wifi"
,
"iLabs"
,
"Challenger 2040 WiFi"
,
"0x2e8a"
,
"0x1006"
,
"CHALLENGER_2040_WIFI_RP2040"
,
8
,
"boot2_w25q080_2_padded_checksum"
)
MakeBoard
(
"challenger_2040_lte"
,
"iLabs"
,
"Challenger 2040 LTE"
,
"0x2e8a"
,
"0x100b"
,
"CHALLENGER_2040_LTE_RP2040"
,
8
,
"boot2_w25q080_2_padded_checksum"
)
MakeBoard
(
"challenger_nb_2040_wifi"
,
"iLabs"
,
"Challenger NB 2040 WiFi"
,
"0x2e8a"
,
"0x100b"
,
"CHALLENGER_2040_LTE_RP2040"
,
8
,
"boot2_w25q080_2_padded_checksum"
)
MakeBoard
(
"ilabs_rpico32"
,
"iLabs"
,
"RPICO32"
,
"0x2e8a"
,
"0x1010"
,
"ILABS_2040_RPICO32_RP2040"
,
8
,
"boot2_w25q080_2_padded_checksum"
)
MakeBoard
(
"melopero_shake_rp2040"
,
"Melopero"
,
"Shake RP2040"
,
"0x2e8a"
,
"0x1005"
,
"MELOPERO_SHAKE_RP2040"
,
16
,
"boot2_w25q080_2_padded_checksum"
)
MakeBoard
(
"upesy_rp2040_devkit"
,
"uPesy"
,
"RP2040 DevKit"
,
"0x2e8a"
,
"0x1007"
,
"UPESY_RP2040_DEVKIT"
,
2
,
"boot2_w25q080_2_padded_checksum"
)
MakeBoard
(
"wiznet_5100s_evb_pico"
,
"WIZnet"
,
"W5100S-EVB-Pico"
,
"0x2e8a"
,
"0x1008"
,
"WIZNET_5100S_EVB_PICO"
,
2
,
"boot2_w25q080_2_padded_checksum"
)
variants/challenger_nb_2040_wifi/ChallengerWiFi.cpp
0 → 100644
View file @
f1060351
/*
ESP8285 helper class for the Challenger RP2040 WiFi boards
Copyright (c) 2021 P. Oldberg <pontus@ilabs.se>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <Arduino.h>
#include <ChallengerWiFi.h>
Challenger2040WiFiClass
::
Challenger2040WiFiClass
()
{
pinMode
(
PIN_ESP8285_RST
,
OUTPUT
);
digitalWrite
(
PIN_ESP8285_RST
,
LOW
);
// Hold ESP8285 in reset
pinMode
(
PIN_ESP8285_MODE
,
OUTPUT
);
digitalWrite
(
PIN_ESP8285_MODE
,
HIGH
);
// Prepare for normal start
}
// Do a HW reset by applying a low pulse to the reset line for 1mSec
void
Challenger2040WiFiClass
::
doHWReset
()
{
digitalWrite
(
PIN_ESP8285_RST
,
LOW
);
// Hold ESP8285 in reset
delay
(
1
);
digitalWrite
(
PIN_ESP8285_RST
,
HIGH
);
// Release ESP8285 reset
}
// Set the mode flag high to indicate normal run operation and do a HW
// reset.
void
Challenger2040WiFiClass
::
runReset
()
{
// Prepare ESP8285 for normal op
digitalWrite
(
PIN_ESP8285_MODE
,
HIGH
);
// Prepare for normal start
doHWReset
();
}
// Set the mode flag low to indicate flash operation and do a HW
// reset.
void
Challenger2040WiFiClass
::
flashReset
()
{
// Prepare ESP8285 for flashing
digitalWrite
(
PIN_ESP8285_MODE
,
LOW
);
// Prepare for normal start
doHWReset
();
}
// Wait for the modem to reply with a "ready" prompt. This can be done
// after a sw or hw reset have been performed to ensure that the AT
// interpreter is up and running.
bool
Challenger2040WiFiClass
::
waitForReady
()
{
int
timeout
=
20
;
// Aprox max 2 sec
Serial2
.
begin
(
DEFAULT_ESP8285_BAUDRATE
);
Serial2
.
setTimeout
(
100
);
String
rdy
=
Serial2
.
readStringUntil
(
'\n'
);
while
(
!
rdy
.
startsWith
(
"ready"
)
&&
timeout
--
)
{
rdy
=
Serial2
.
readStringUntil
(
'\n'
);
}
Serial2
.
setTimeout
(
1000
);
// Reset default timeout to 1000
if
(
timeout
)
return
true
;
return
false
;
}
// Reset the ESP8285 and wait for the "ready" prompt to be returned.
bool
Challenger2040WiFiClass
::
reset
()
{
runReset
();
return
waitForReady
();
}
// Checks to see if the modem responds to the "AT" poll command.
bool
Challenger2040WiFiClass
::
isAlive
()
{
int
timeout
=
5
;
Serial2
.
setTimeout
(
250
);
Serial2
.
println
(
F
(
"AT"
));
String
rdy
=
Serial2
.
readStringUntil
(
'\n'
);
while
(
!
rdy
.
startsWith
(
F
(
"OK"
))
&&
timeout
--
)
{
rdy
=
Serial2
.
readStringUntil
(
'\n'
);
}
Serial2
.
setTimeout
(
1000
);
if
(
timeout
)
return
true
;
return
false
;
}
// Change the baud rate of the ESP8285 as well as the local UART.
// No checking is done on the input baud rate so the user must know what
// baud rates are valid. The function ends by checking if the ESP8285 is
// reachable by doing an "AT" poll.
bool
Challenger2040WiFiClass
::
changeBaudRate
(
int
baud
)
{
Serial2
.
print
(
F
(
"AT+UART_CUR="
));
Serial2
.
print
(
baud
);
Serial2
.
println
(
F
(
",8,1,0,0"
));
delay
(
100
);
Serial2
.
end
();
Serial2
.
begin
(
baud
);
return
isAlive
();
}
Challenger2040WiFiClass
Challenger2040WiFi
;
variants/challenger_nb_2040_wifi/ChallengerWiFi.h
0 → 100644
View file @
f1060351
/*
ESP8285 helper class for the Challenger RP2040 WiFi boards
Copyright (c) 2021 P. Oldberg <pontus@ilabs.se>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#define DEFAULT_ESP8285_BAUDRATE 115200
class
Challenger2040WiFiClass
{
public:
Challenger2040WiFiClass
();
void
doHWReset
();
void
runReset
();
void
flashReset
();
bool
waitForReady
();
bool
reset
();
bool
isAlive
();
bool
changeBaudRate
(
int
baud
);
};
extern
Challenger2040WiFiClass
Challenger2040WiFi
;
variants/challenger_nb_2040_wifi/pins_arduino.h
0 → 100644
View file @
f1060351
#pragma once
#include <ChallengerWiFi.h>
#define PINS_COUNT (24u)
#define NUM_DIGITAL_PINS (24u)
#define NUM_ANALOG_INPUTS (4u)
#define NUM_ANALOG_OUTPUTS (0u)
#define ADC_RESOLUTION (12u)
// LEDs
#define PIN_LED (12u)
// Serial
#define PIN_SERIAL1_TX (16u)
#define PIN_SERIAL1_RX (17u)
// Connected to ESP8285
#define PIN_SERIAL2_TX (4u)
#define PIN_SERIAL2_RX (5u)
#define PIN_ESP8285_RST (19u)
#define PIN_ESP8285_MODE (13u)
// SPI
#define PIN_SPI0_MISO (24u)
#define PIN_SPI0_MOSI (23u)
#define PIN_SPI0_SCK (22u)
#define PIN_SPI0_SS (21u)
// Not pinned out
#define PIN_SPI1_MISO (31u)
#define PIN_SPI1_MOSI (31u)
#define PIN_SPI1_SCK (31u)
#define PIN_SPI1_SS (31u)
// Wire
#define PIN_WIRE0_SDA (0u)
#define PIN_WIRE0_SCL (1u)
// Not pinned out
#define PIN_WIRE1_SDA (31u)
#define PIN_WIRE1_SCL (31u)
#define SERIAL_HOWMANY (2u)
#define SPI_HOWMANY (1u)
#define WIRE_HOWMANY (1u)
#define LED_BUILTIN PIN_LED
#define NEOPIXEL (11u)
static
const
uint8_t
D0
=
(
16u
);
static
const
uint8_t
D1
=
(
17u
);
static
const
uint8_t
D2
=
(
24u
);
static
const
uint8_t
D3
=
(
23u
);
static
const
uint8_t
D4
=
(
22u
);
static
const
uint8_t
D5
=
(
2u
);
static
const
uint8_t
D6
=
(
3u
);
static
const
uint8_t
D7
=
(
0u
);
static
const
uint8_t
D8
=
(
1u
);
static
const
uint8_t
D9
=
(
6u
);
static
const
uint8_t
D10
=
(
7u
);
static
const
uint8_t
D11
=
(
8u
);
static
const
uint8_t
D12
=
(
9u
);
static
const
uint8_t
D13
=
(
10u
);
static
const
uint8_t
D14
=
(
14u
);
static
const
uint8_t
D15
=
(
15u
);
static
const
uint8_t
D16
=
(
18u
);
static
const
uint8_t
D17
=
(
20u
);
static
const
uint8_t
A0
=
(
26u
);
static
const
uint8_t
A1
=
(
27u
);
static
const
uint8_t
A2
=
(
28u
);
static
const
uint8_t
A3
=
(
29u
);
static
const
uint8_t
A4
=
(
25u
);
static
const
uint8_t
A5
=
(
21u
);
variants/ilabs_rpico32/Ilabs2040WiFiClass.cpp
0 → 100644
View file @
f1060351
/*
ESP8285 helper class for the Challenger RP2040 WiFi boards
Copyright (c) 2021 P. Oldberg <pontus@ilabs.se>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <Arduino.h>
#include <Ilabs2040WiFiClass.h>
Ilabs2040WiFiClass
::
Ilabs2040WiFiClass
()
{
pinMode
(
PIN_ESP_RESET
,
OUTPUT
);
digitalWrite
(
PIN_ESP_RESET
,
LOW
);
// Hold ESP8285 in reset
pinMode
(
PIN_ESP_MODE
,
OUTPUT
);
digitalWrite
(
PIN_ESP_MODE
,
HIGH
);
// Prepare for normal start
}
// Do a HW reset by applying a low pulse to the reset line for 1mSec
void
Ilabs2040WiFiClass
::
doHWReset
()
{
digitalWrite
(
PIN_ESP_RESET
,
LOW
);
// Hold ESP8285 in reset
delay
(
1
);
digitalWrite
(
PIN_ESP_RESET
,
HIGH
);
// Release ESP8285 reset
}
// Set the mode flag high to indicate normal run operation and do a HW
// reset.
void
Ilabs2040WiFiClass
::
runReset
()
{
// Prepare ESP8285 for normal op
digitalWrite
(
PIN_ESP_MODE
,
HIGH
);
// Prepare for normal start
doHWReset
();
}
// Set the mode flag low to indicate flash operation and do a HW
// reset.
void
Ilabs2040WiFiClass
::
flashReset
()
{
// Prepare ESP8285 for flashing
digitalWrite
(
PIN_ESP_MODE
,
LOW
);
// Prepare for normal start
doHWReset
();
}
// Wait for the modem to reply with a "ready" prompt. This can be done
// after a sw or hw reset have been performed to ensure that the AT
// interpreter is up and running.
bool
Ilabs2040WiFiClass
::
waitForReady
()
{
int
timeout
=
20
;
// Aprox max 2 sec
ESP_SERIAL_PORT
.
begin
(
DEFAULT_ESP8285_BAUDRATE
);
ESP_SERIAL_PORT
.
setTimeout
(
100
);
String
rdy
=
ESP_SERIAL_PORT
.
readStringUntil
(
'\n'
);
while
(
!
rdy
.
startsWith
(
"ready"
)
&&
timeout
--
)
{
rdy
=
ESP_SERIAL_PORT
.
readStringUntil
(
'\n'
);
}
ESP_SERIAL_PORT
.
setTimeout
(
1000
);
// Reset default timeout to 1000
if
(
timeout
)
return
true
;
return
false
;
}
// Reset the ESP8285 and wait for the "ready" prompt to be returned.
bool
Ilabs2040WiFiClass
::
reset
()
{
runReset
();
return
waitForReady
();
}
// Checks to see if the modem responds to the "AT" poll command.
bool
Ilabs2040WiFiClass
::
isAlive
()
{
int
timeout
=
5
;
ESP_SERIAL_PORT
.
setTimeout
(
250
);
ESP_SERIAL_PORT
.
println
(
F
(
"AT"
));
String
rdy
=
ESP_SERIAL_PORT
.
readStringUntil
(
'\n'
);
while
(
!
rdy
.
startsWith
(
F
(
"OK"
))
&&
timeout
--
)
{
rdy
=
ESP_SERIAL_PORT
.
readStringUntil
(
'\n'
);
}
ESP_SERIAL_PORT
.
setTimeout
(
1000
);
if
(
timeout
)
return
true
;
return
false
;
}
// Change the baud rate of the ESP8285 as well as the local UART.
// No checking is done on the input baud rate so the user must know what
// baud rates are valid. The function ends by checking if the ESP8285 is
// reachable by doing an "AT" poll.
bool
Ilabs2040WiFiClass
::
changeBaudRate
(
int
baud
)
{
ESP_SERIAL_PORT
.
print
(
F
(
"AT+UART_CUR="
));
ESP_SERIAL_PORT
.
print
(
baud
);
ESP_SERIAL_PORT
.
println
(
F
(
",8,1,0,0"
));
delay
(
100
);
ESP_SERIAL_PORT
.
end
();
ESP_SERIAL_PORT
.
begin
(
baud
);
return
isAlive
();
}
Ilabs2040WiFiClass
Ilabs2040WiFi
;
variants/ilabs_rpico32/Ilabs2040WiFiClass.h
0 → 100644
View file @
f1060351
/*
ESP8285 helper class for the Challenger RP2040 WiFi boards
Copyright (c) 2021 P. Oldberg <pontus@ilabs.se>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#define DEFAULT_ESP8285_BAUDRATE 115200
class
Ilabs2040WiFiClass
{
public:
Ilabs2040WiFiClass
();
void
doHWReset
();
void
runReset
();
void
flashReset
();
bool
waitForReady
();
bool
reset
();
bool
isAlive
();
bool
changeBaudRate
(
int
baud
);
};
extern
Ilabs2040WiFiClass
Ilabs2040WiFi
;
variants/ilabs_rpico32/pins_arduino.h
0 → 100644
View file @
f1060351
#pragma once
#include <Ilabs2040WiFiClass.h>
#define PINS_COUNT (26u)
#define NUM_DIGITAL_PINS (26u)
#define NUM_ANALOG_INPUTS (4u)
#define NUM_ANALOG_OUTPUTS (0u)
#define ADC_RESOLUTION (12u)
// Connected to ESP8285
#define PIN_SERIAL1_TX (0u)
#define PIN_SERIAL1_RX (1u)
#define PIN_ESP_RESET (2u)
#define PIN_ESP_MODE (3u)
#define PIN_ESP_TXD PIN_SERIAL1_TX
#define PIN_ESP_RXD PIN_SERIAL1_RX
#define ESP_SERIAL_PORT Serial1
// Serial
#define PIN_SERIAL2_TX (8u)
#define PIN_SERIAL2_RX (9u)
// SPI
#define PIN_SPI0_MISO (24u)
#define PIN_SPI0_MOSI (23u)
#define PIN_SPI0_SCK (22u)
#define PIN_SPI0_SS (21u)
// Not pinned out
#define PIN_SPI1_MISO (31u)
#define PIN_SPI1_MOSI (31u)
#define PIN_SPI1_SCK (31u)
#define PIN_SPI1_SS (31u)
// Wire
#define PIN_WIRE0_SDA (4u)
#define PIN_WIRE0_SCL (5u)
// Not pinned out
#define PIN_WIRE1_SDA (31u)
#define PIN_WIRE1_SCL (31u)
#define SERIAL_HOWMANY (2u)
#define SPI_HOWMANY (1u)
#define WIRE_HOWMANY (1u)
static
const
uint8_t
D0
=
(
0u
);
// Internal to the board
static
const
uint8_t
D1
=
(
1u
);
// Internal to the board
static
const
uint8_t
D2
=
(
2u
);
// Internal to the board
static
const
uint8_t
D3
=
(
3u
);
// Internal to the board
static
const
uint8_t
D4
=
(
4u
);
static
const
uint8_t
D5
=
(
5u
);
static
const
uint8_t
D6
=
(
6u
);
static
const
uint8_t
D7
=
(
7u
);
static
const
uint8_t
D8
=
(
8u
);
static
const
uint8_t
D9
=
(
9u
);
static
const
uint8_t
D10
=
(
10u
);
static
const
uint8_t
D11
=
(
11u
);
static
const
uint8_t
D12
=
(
12u
);
static
const
uint8_t
D13
=
(
13u
);
static
const
uint8_t
D14
=
(
14u
);
static
const
uint8_t
D15
=
(
15u
);
static
const
uint8_t
D16
=
(
16u
);
static
const
uint8_t
D17
=
(
17u
);
static
const
uint8_t
D18
=
(
18u
);
static
const
uint8_t
D19
=
(
19u
);
static
const
uint8_t
D20
=
(
20u
);
static
const
uint8_t
D21
=
(
21u
);
static
const
uint8_t
D22
=
(
22u
);
static
const
uint8_t
D23
=
(
23u
);
static
const
uint8_t
D24
=
(
24u
);
static
const
uint8_t
D25
=
(
25u
);
static
const
uint8_t
D26
=
(
26u
);
static
const
uint8_t
D27
=
(
27u
);
static
const
uint8_t
D28
=
(
28u
);
static
const
uint8_t
D29
=
(
29u
);
static
const
uint8_t
A0
=
(
26u
);
static
const
uint8_t
A1
=
(
27u
);
static
const
uint8_t
A2
=
(
28u
);
static
const
uint8_t
A3
=
(
29u
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment