In this article we look at another ESP32 based product, this time its called the BPI:UNO32.
The microcontroller for this board is an ESP32 with Xtensa 32bit LX6 single/dual-core processor based embedded system.
Here is a picture of the board, as you can see it would called an ‘Arduino compatible’ board with the addition of an RGB LED, a buzzer, 2 buttons.
This makes it a nice development board for beginners
Technical Information
Technical specs | |||
CPU | Xtensa® 32-bit LX6 single / dual core processor | ||
ROM | 448KB | ||
SRAM | 520KB | ||
Flash | 4MB(Onboard),A maximum of 4 Flash/SRAM, each Flash maximum 16MB | ||
Power | 5V@1A micro USB power or 5.5mm 12V DC port | ||
GPIO | 12-bits SAR ADC 18 channel, 2\*8-bit D/A converter, 4*SPI, 2*I2S, 2*I2C, 3*UART, Host SD/eMMC/SDIO, Slave SDIO/SPI | ||
Wi-Fi | 802.11 b/g/n/e/i 802.11 n\(2.4GHz 150Mbps\) 802.11 e\(Quality of Service\) | ||
Bluetooth | BT4.2 & BLE | ||
Buzzer | Passive buzzer | ||
LEDs | RGB LED/POWER LED/Receive LED/Transmit LED |
Arduino IDE Definitions | |
Function | IO |
---|---|
RGB_LED | IO4 |
RGB_LED_POWER | IO2 |
BUZZER | IO25 |
BOTTON_A | IO35 |
BOTTON_B | IO27 |
Communication Protocol | |
SPI | |
MISO | IO19 |
MOSI | IO23 |
SCK | IO23 |
SS | IO5 |
I2C | |
SCL | IO22 |
SDA | IO21 |
Part Information
The board comes in at about $14
Development
You can use the Arduino IDE, Micropython and also webbit (similar to Microbit)
Install the ESP32 support using the Boards manager
Installation instructions using Arduino IDE Boards Manager
- Stable release link:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- Development release link:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
Starting with 1.6.4, Arduino allows installation of third-party platform packages using Boards Manager. We have packages available for Windows, Mac OS, and Linux (32, 64 bit and ARM).
- Install the Arduino IDE at the 1.8 level or later. The current version is at the Arduino website.
- Start Arduino and open Preferences window.
- Enter one of the release links above into Additional Board Manager URLs field. You can add multiple URLs, separating them with commas.
- Open Boards Manager from Tools > Board menu and install esp32 platform (and don’t forget to select your ESP32 board from Tools > Board menu after installation).
In the board manager find the BPI:bit and select the correct serial port
Here is some demo code – it also had a buzzer test which I removed
#include <Arduino.h>
#include "WiFi.h"
#define LEDC_CHANNEL_0 0
#define LEDC_TIMER_13_BIT 13
#define LEDC_BASE_FREQ 450
#define Buzzer 25
const char *ssid = "SSID";
const char *password = "PASSWD";
const uint16_t PixelCount = 25;
const uint8_t PixelPin = 4;
#define colorSaturation 255
#define delay_ms 500
#define bout 3
#define LEDC_CHANNEL_1 1
#define LEDC_CHANNEL_2 2
#define LEDC_CHANNEL_3 3
#define LEDC_LED_FREQ 10000
#define LEDR 17
#define LEDG 16
#define LEDB 27
#define AD10 36 //ADC1_CH0
#define AD13 39 //ADC1_CH3
#define AD14 32 //ADC1_CH4
#define AD15 33 //ADC1_CH5
#define AD16 34 //ADC1_CH6
#define AD17 35 //ADC1_CH7
int AD_Value0 = 0;
int AD_Value3 = 0;
int AD_Value4 = 0;
int AD_Value5 = 0;
int AD_Value6 = 0;
int AD_Value7 = 0;
int adTestFreq = 0;
int wifiTestFreq = 0;
int ledTestFreq = 0;
int buzzerTestFreq = 0;
int brightness = 0;
int fadeAmount = 5;
void ledcAnalogWrite(uint8_t channel, uint32_t value)
{
// calculate duty, 8191 from 2 ^ 13 - 1 (2 ^ LEDC_TIMER_13_BIT - 1)
//value_MAX = 255
uint32_t duty = (8191 / 255) * value;
// write duty to LEDC
ledcWrite(channel, duty);
}
void setup()
{
Serial.begin(115200); //Serial Port Config 115200-8-N-1
while (!Serial)
; // wait for serial attach
Serial.println();
Serial.println("Initializing...");
Serial.flush();
Serial.println();
Serial.println("BPI-uno32 Function Test Demo");
Serial.println("Running...");
Serial.println();
ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT);
ledcSetup(LEDC_CHANNEL_1, LEDC_LED_FREQ, LEDC_TIMER_13_BIT);
ledcSetup(LEDC_CHANNEL_2, LEDC_LED_FREQ, LEDC_TIMER_13_BIT);
ledcSetup(LEDC_CHANNEL_3, LEDC_LED_FREQ, LEDC_TIMER_13_BIT);
ledcAttachPin(Buzzer, LEDC_CHANNEL_0);
ledcAttachPin(LEDR, LEDC_CHANNEL_1);
ledcAttachPin(LEDG, LEDC_CHANNEL_2);
ledcAttachPin(LEDB, LEDC_CHANNEL_3);
}
void loop()
{
/**************************************************************
**************************************************************
***Board:BPI:uno32-Webduino ***
***Function:RGB_LED Test ***
**************************************************************
*************************************************************/
Serial.println();
Serial.println("LED test!!!");
Serial.println();
//LED_R fading
Serial.println("LED_R is fading");
for (ledTestFreq = 0; ledTestFreq < bout; ledTestFreq++)
{
for (brightness = 0; brightness < 255; brightness++)
{
Serial.print(".");
// set the brightness on LEDC channel 0
ledcAnalogWrite(LEDC_CHANNEL_1, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255)
{
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
Serial.println();
ledcAnalogWrite(LEDC_CHANNEL_1, 0);
}
//LED_G fading
Serial.println("LED_G is fading");
for (ledTestFreq = 0; ledTestFreq < bout; ledTestFreq++)
{
for (brightness = 0; brightness < 255; brightness++)
{
Serial.print(".");
// set the brightness on LEDC channel 0
ledcAnalogWrite(LEDC_CHANNEL_2, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255)
{
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
Serial.println();
ledcAnalogWrite(LEDC_CHANNEL_2, 0);
}
//LED_B fading
Serial.println("LED_B is fading");
for (ledTestFreq = 0; ledTestFreq < bout; ledTestFreq++)
{
for (brightness = 0; brightness < 255; brightness++)
{
Serial.print(".");
// set the brightness on LEDC channel 0
ledcAnalogWrite(LEDC_CHANNEL_3, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255)
{
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
Serial.println();
ledcAnalogWrite(LEDC_CHANNEL_3, 0);
}
Serial.println("--Over--");
/**************************************************************
**************************************************************
***Board:BPI:uno32-Webduino ***
***Function:ADC(channel_1) Test ***
**************************************************************
*************************************************************/
Serial.println();
Serial.println("ADC test!!!");
Serial.println();
for (adTestFreq = 0; adTestFreq < bout; adTestFreq++)
{
// turn the LED on (HIGH is the voltage level)
AD_Value0 = analogRead(AD10);
AD_Value3 = analogRead(AD13);
AD_Value4 = analogRead(AD14);
AD_Value5 = analogRead(AD15);
AD_Value6 = analogRead(AD16);
AD_Value7 = analogRead(AD17);
//AD10-Pin:IO36
Serial.print("AD10:");
Serial.print(AD_Value0);
Serial.println();
//AD13-Pin:IO39
Serial.print("AD13:");
Serial.print(AD_Value3);
Serial.println();
//AD14-Pin:IO32
Serial.print("AD14:");
Serial.print(AD_Value4);
Serial.println();
//AD15-Pin:IO33
Serial.print("AD15:");
Serial.print(AD_Value5);
Serial.println();
//AD16-Pin:IO34
Serial.print("AD16:");
Serial.print(AD_Value6);
Serial.println();
//AD17-Pin:IO35
Serial.print("AD17:");
Serial.print(AD_Value7);
Serial.println();
Serial.println();
Serial.println();
delay(1000);
}
Serial.println("--Over--");
/**************************************************************
**************************************************************
***Board:BPI:uno32-Webduino ***
***Function:Wi-Fi Test ***
**************************************************************
*************************************************************/
Serial.println();
Serial.println("Wi-Fi test!!!");
Serial.println();
// //Wi-Fi connect
// Serial.print("Connecting to ");
// Serial.println(ssid);
// WiFi.begin(ssid, password);
// while (WiFi.status() != WL_CONNECTED)
// {
// delay(500);
// Serial.print(".");
// }
// Serial.println("WiFi connected");
// Serial.println("IP address: ");
// Serial.println(WiFi.localIP());
// Serial.println("Setup done");
// Serial.println("");
// WiFi.disconnect();
for (wifiTestFreq = 0; wifiTestFreq < 1; wifiTestFreq++)
{
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
{
Serial.println("no networks found");
}
else
{
Serial.print(n);
Serial.println(" networks found");
for (int j = 0; j < n; ++j)
{
// Print SSID and RSSI for each network found
Serial.print(j + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(j));
Serial.print(" (");
Serial.print(WiFi.RSSI(j));
Serial.print(")");
Serial.println((WiFi.encryptionType(j) == WIFI_AUTH_OPEN) ? " " : "*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(2000);
}
Serial.println("--Over--");
Serial.println("--Over--");
Serial.println();
Serial.println("---------Test Over !!!---------");
}