I, Stonez56, also known as Kevin Chen, am a tech enthusiast based in Hsinchu, Taiwan. I’m known for my work in Arduino, IoT, app development, and more. My YouTube channel and blog are platforms where I share my knowledge and projects. I’ve also developed an online tool for generating U8g2 UTF8 font codes for Arduino projects. My work is educational, aimed at helping others learn and implement technology in their own projects. Visit stonez56.blogspot.com
Hi, welcome to this week's Weekend project with Stonez56.
This week is Arduino Episode #39, "Drawing Dice Dynamically at 0.96" OLED with u8g2"
This video is suitable for people who want to learn how to draw patterns on SD 1336 LED.
=== IMPORTANT NOTICE ===
Do you want to generate u8g2 UTF8 font for your own Arduino projects?
Try this online web tool I created @ https://kidsgo.net/u8g2
Just 3 easy steps to get UTF8 Arduino codes for your projects!
Try it today!!
=== NOTICE ===
In the previous episode, I showed audiences how to use the accelerometer to draw dynamic dice in APP inventor 2. People who are interested can click this link to watch.
(App Inventor Episode 11: https: // • App Inventor #11 Write your own App (... )
The next video is planned to transfer the dice points from App Inventor 2 to the OLED on ESP32 for display in real time. In this way, we can learn how to communicate from mobile App to ESP32. Stay tuned!
References:
* u8g2 font reference: https://github.com/olikraus/u8g2/wiki...
* u8g2 Github: https://github.com/olikraus/u8g2
* u8g2 UTF8 font generator: https://kidsgo.net/u8g2
If you don’t have enough time, you can also choose the part you want to watch from the timeline below!
Video timeline:
00:00 start
00:40 Results presentation (Demo)
01:15 Coding briefing
02:13 Use random in code
04:23 Show dice at random location
08:53 drawDice function
14:59 Show total points
16:07 Select u8g2 fonts
Arduino: Use Arduino Cli -> 勾選“Use Arduino CLI installed instated of the legacy Arduino IDE”
重新啟動 VS code
============ ENGLISH =====================
When install Arduino Extension for VS code, if you encountered "Cannot find Arduino tools. Use Arduino CLI bundled with this extension instead?" error message. Try this to fix it.
/*
Basic ESP8266 MQTT example
This sketch demonstrates the capabilities of the pubsub library in combination
with the ESP8266 board/library.
It connects to an MQTT server then:
- publishes "hello world" to the topic "outTopic" every two seconds
- subscribes to the topic "inTopic", printing out any messages
it receives. NB - it assumes the received payloads are strings not binary
- If the first character of the topic "inTopic" is an 1, switch ON the ESP Led,
else switch it off
It will reconnect to the server if the connection is lost using a blocking
reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to
achieve the same result without blocking the main loop.
To install the ESP8266 board, (using Arduino 1.6.4+):
- Add the following 3rd party board manager under "File -&nbgt; Preferences -&nbgt; Additional Boards Manager URLs":
http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Open the "Tools -&nbgt; Board -&nbgt; Board Manager" and click install for the ESP8266"
- Select your ESP8266 in "Tools -&nbgt; Board"
*/
#include &nblt;WiFi.h&nbgt;
#include &nblt;PubSubClient.h&nbgt;
#include &nblt;EasyButton.h&nbgt;
#define LED 2 //built-in LED on ESP32
// Update these with values suitable for your network.
const char *ssid = "Stonez24";
const char *password = "a0101010101a";
// Define your client ID on EMQX
String mqtt_ClientID = "stonez56_IOT_Station_";
// Define your topics to subscribe / publish
const char* sub_topic = "stonez56/esp32s";
const char* pub_led_topic = "stonez56/esp32s_led_state";
const char* pub_init_topic = "stonez56/esp32s_is_back";
// EMQX broker parameters
const char *mqtt_server = "broker.emqx.io";
const char *mqtt_userName = "emqx";
const char *mqtt_password = "public";
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi()
{
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i &nblt; length; i++)
{
Serial.print((char)payload[i]);
}
Serial.println();
payload[length] = '\0';
String message = (char *)payload;
if (strcmp(topic, sub_topic) == 0)
{
if (message == "off")
{
digitalWrite(LED, LOW); //Turn off
client.publish(pub_led_topic, "LED off");
}
if (message == "on")
{
digitalWrite(LED, HIGH); //Turn on
client.publish(pub_led_topic, "LED on");
}
if (message == "flash")
{
digitalWrite(LED, LOW); //LED flashing 2 times
delay(200);
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
client.publish(pub_led_topic, "LED flashed 2 times");
}
}
/* Switch on the LED if an 1 was received as first character
// if ((char)payload[0] == '1')
// {
// digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// // but actually the LED is on; this is because
// // it is active low on the ESP-01)
// }
// else
// {
// digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
// } */
}
void reconnect()
{
// Loop until we're reconnected
while (!client.connected())
{
Serial.println("Attempting EMQX MQTT connection...");
// Create a random client ID
mqtt_ClientID += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect((mqtt_ClientID, mqtt_userName, mqtt_password)))
{
Serial.print(" connected with Client ID: ");
Serial.println(mqtt_ClientID);
// Once connected, publish an announcement...
client.publish(pub_init_topic, "Hi, I'm online!");
// ... and resubscribe
client.subscribe(sub_topic);
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup()
{
pinMode(LED, OUTPUT); // Initialize the _LED pin as an output
digitalWrite(LED, LOW); //default ESP32 LOW is turn off
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
/* unsigned long now = millis();
// if (now - lastMsg &nbgt; 2000)
// {
// lastMsg = now;
// ++value;
// snprintf(msg, MSG_BUFFER_SIZE, "hello world #%ld", value);
// Serial.print("Publish message: ");
// Serial.println(msg);
// client.publish("stonez56/esp32s_button_pushed", msg);
// } */
}