diff --git a/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_01.jpg b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_01.jpg
new file mode 100755
index 00000000..db2c0187
Binary files /dev/null and b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_01.jpg differ
diff --git a/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_02.jpg b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_02.jpg
new file mode 100755
index 00000000..406aac91
Binary files /dev/null and b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_02.jpg differ
diff --git a/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_03.jpg b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_03.jpg
new file mode 100755
index 00000000..0edf5114
Binary files /dev/null and b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_03.jpg differ
diff --git a/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_04.jpg b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_04.jpg
new file mode 100644
index 00000000..5f645cd0
Binary files /dev/null and b/docs/assets/img/product_pics/hat/cardkb_hat/cardkb_hat_04.jpg differ
diff --git a/docs/en/hat/hat-cardkb.md b/docs/en/hat/hat-cardkb.md
new file mode 100644
index 00000000..75692c9c
--- /dev/null
+++ b/docs/en/hat/hat-cardkb.md
@@ -0,0 +1,119 @@
+# CardKB HAT{docsify-ignore-all}
+
+
+
+***
+
+:memo:**[Description](#Description)** :octocat:**[Example](#Example)** 🛒**[Purchase](https://m5stack.com/collections/m5-unit/products/cardkb_hat)** :clapper:**[Related Video](#Related-Video)** **[EasyLoader](#EasyLoader)**
+
+## Description
+
+**CardKB HAT** is an implementation of a full-featured QWERTY keyboard tailored as a HAT for the M5StickC. Consider that you want to make some cool stuff that require interaction through typing on a keyboard. But M5StickC itself just has 2 buttons. So, here comes the flexible and yet powerful “CardKB HAT” to solve the issue.
+
+The CardKB HAT also offers support for several button combinations (Shift+Key, Fn+Key) adding virtually many different keys. This comes with an RGB LED to indicate the keyboard state. IIC address is 0x5F.
+
+**Button combination description:**
+
+* **Single button is pressed**,once pressed button the led flashing blue.keyboard will output the first (normal) key value in its lower case. E.g. if "Q" is pressed, keyboard will output "q"(lower case).
+
+* **Shift+Key**, After pressing the Shift key, led flashing red,if a letter button is pressed, it'll output the letter in its upper case or the second value.
+ E.g. if "Shift" is pressed once, then "Q" is pressed, the keyboard will output "Q". If "Shift" is double clicked, then the keyboard will lock this function and all the letter keys pressed will give output in CAPITALS.
+
+* **Fn+Key**(custom function key combination), led flashing green,keyboard will output the third key value, which you can customize based on the requirement.
+
+
+* **Double-click Shift or fn** to lock Shift(red always on) or Fn(green always on) and output the combined value multiple times.
+
+
+
+## Product Features
+
+- Full-function keyboard with multi-key combination support
+- IIC Address : 0X5F(I2C)
+- Product Size:84.6mm x 54.2mm x 6.5mm
+
+## Include
+
+- 1x CardKB HAT
+
+## Application
+
+- Keyboard peripheral
+
+
+## Related Link
+
+- **[Offical Video](https://www.youtube.com/channel/UCozgFVglWYQXbvTmGyS739w)**
+
+- **[Forum](http://forum.m5stack.com/)**
+
+- **[CardKB HAT Firmware](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Hat/CardKB_HAT/firmware_328p/cardKB_HAT)**
+
+
+## EasyLoader
+
+
+
+
+
+>1. EasyLoader is a simple and fast program burner. Every product page in EasyLoader provides a product-related case program. This can be burned to the M5 device through simple steps, and a series of function verifications can be performed.
+
+>After downloading the software, double-click to run the application, connect the M5 device to the computer through the data cable, select the port parameters, click **"Burn"** to burn the program (**For M5StickC, set the baud rate to 115200 or 750000**)
+
+?>3. Currently EasyLoader is only available for Windows operating system, Before installing and using the Easyloader for M5Core, you need to install CP210X driver (you do not need to install with M5StickC as controller)[Click here to view the driver installation tutorial](en/related_documents/M5Burner#install-usb-driver)
+
+## PinMap
+
+**ATMega328 ISP**Download interface Pin foot definition
+
+
+
+
+## Example
+
+### Arduino IDE
+
+*To get the code, please click [here](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Hat/CardKB_HAT/Arduino)。*
+
+```arduino
+#include
+#include
+
+#define CARDKB_ADDR 0x5F
+
+void setup()
+{
+ M5.begin();
+ Wire.begin(0, 26);
+ M5.Lcd.setRotation(3);
+ M5.Lcd.fillScreen(BLACK);
+ M5.Lcd.setCursor(0, 0, 2 );
+ M5.Lcd.setTextColor(YELLOW);
+
+ M5.Lcd.println("IIC Address: 0x5F\n");
+ M5.Lcd.println(">>");
+}
+void loop()
+{
+ Wire.requestFrom(CARDKB_ADDR, 1);
+ while(Wire.available())
+ {
+ char c = Wire.read(); // receive a byte as characterif
+ if (c != 0)
+ {
+ M5.Lcd.printf("%c", c);
+ Serial.println(c, HEX);
+ Serial.println(char(c));
+ }
+ }
+ // delay(10);
+}
+```
+
+## Related Video
+
+- **CardKB HAT**
+
+
diff --git a/docs/en/module/gsm.md b/docs/en/module/gsm.md
index 53c4093c..c87d19af 100644
--- a/docs/en/module/gsm.md
+++ b/docs/en/module/gsm.md
@@ -121,8 +121,10 @@ void setup() {
M5.begin();
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, 16, 17);
- pinMode(5, OUTPUT);
- digitalWrite(5, 1);
+ pinMode(2, OUTPUT);
+ digitalWrite(2, 0);
+ delay(3000);
+ digitalWrite(2, 1);
}
void loop() {
diff --git a/docs/en/module/lte.md b/docs/en/module/lte.md
index 56f141d7..955e553d 100644
--- a/docs/en/module/lte.md
+++ b/docs/en/module/lte.md
@@ -127,8 +127,10 @@ void setup() {
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, 16, 17);
- pinMode(5, OUTPUT);
- digitalWrite(5, 1);
+ pinMode(2, OUTPUT);
+ digitalWrite(2, 0);
+ delay(3000);
+ digitalWrite(2, 1);
}
void loop() {
diff --git a/docs/en/module/nb-iot.md b/docs/en/module/nb-iot.md
index f22715a5..df574cff 100644
--- a/docs/en/module/nb-iot.md
+++ b/docs/en/module/nb-iot.md
@@ -154,8 +154,10 @@ void setup() {
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, 16, 17);
- pinMode(5, OUTPUT);
- digitalWrite(5, 1);
+ pinMode(2, OUTPUT);
+ digitalWrite(2, 0);
+ delay(3000);
+ digitalWrite(2, 1);
}
diff --git a/docs/en/uiflow/RS485.md b/docs/en/uiflow/RS485.md
index 4cd2611f..65b15044 100644
--- a/docs/en/uiflow/RS485.md
+++ b/docs/en/uiflow/RS485.md
@@ -12,21 +12,21 @@
## RS485 Introduction
->RS485 is a data transmission standard. Its basic usage is the same as that of the serial port. It defines the RX and TX ports, communication baud rate and data bits for communication. Usually configured as (9600, Serial_8N1, RX_PIN, TX_PIN), 9600 baud rate, 8 data bits, no parity, 1 stop bit
+>RSRS485 is the data transmission standard used mostly for industrial purposes. It is a form of asynchronous serial communication (UART). This is similar to but more powerful than RS232 which is commonly used in almost all the microcontrollers. It defines the RX and TX ports, communication baud rate and data bits for communication just like any other serial communication protocol. Usual configuration is as follows: (9600, Serial_8N1, RX_PIN, TX_PIN), 9600 baud rate, 8 data bits, no parity, 1 stop bit.
## RS485 example
->1. Serial port 2 is defined during program initialization. Normally, the serial port of M5Stack is 16 (RX_PIN) and 17 (TX_PIN), the serial port of M5StickC is 33 (RX_PIN) and 32 (TX_PIN), and the HAT serial port is 26 (RX_PIN) and 0 (TX_PIN).
+>1. Second serial port is defined during program initialization. Normally, the serial port on M5Stack is 16 (RX_PIN) and 17 (TX_PIN), the serial port on M5StickC is 33 (RX_PIN) and 32 (TX_PIN), and the HAT's serial port is 26 (RX_PIN) and 0 (TX_PIN).
Serial2.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
->2. Send data can use Serial2.print ("x") or Serial.write ("x"). For the difference between the two, please refer to the use of Serial in Arduino.
+>2. To send data Serial.print ("x") or Serial.write ("x") can be used. For the difference between the two, please refer to the use of Serial in Arduino.
-Serial2.print("97");或者Serial2.write("97");
+Serial2.print("97"); or Serial2.write("97");
->3. Read data can be read from the buffer using Serial2.read().
+>3. Data can be read from the buffer using Serial.read().
if(Serial2.available()){
char c = Serial2.read();
diff --git a/docs/index.md b/docs/index.md
index b3d6721c..d660f0e8 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -937,6 +937,16 @@
+