From a82311fe473cf8f19eef5e4ed08a19e545d73d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Fri, 22 Apr 2022 19:43:41 +0200 Subject: [PATCH] Add project and board README.md --- README.md | 73 ++++++++++++++++++++++++++++++++++++++++++ boards/wr3/README.md | 39 ++++++++++++++++++++++ boards/wr3/pinout.png | Bin 0 -> 29531 bytes 3 files changed, 112 insertions(+) create mode 100644 README.md create mode 100644 boards/wr3/README.md create mode 100644 boards/wr3/pinout.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..4540ac0 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# LibreTuya + +PlatformIO development platform for IoT modules manufactured by Tuya Inc. + +**Note:** this project is work-in-progress. + +## Board List + +A (mostly) complete* list of Tuya wireless module boards. + +  | Module Name | MCU | Flash | RAM | Pins** | Wi-Fi | BLE | Platform name +------------------------------|------------------------------------------------------------------------------------------------|-------------------------|-------|----------|-------------|-------|-----|--------------- +❌ | [WB1S](https://developer.tuya.com/en/docs/iot/wb1s?id=K9duevbj3ol4x) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 18 (11 I/O) | ✔️ | ✔️ | - +❌ | [WB2L](https://developer.tuya.com/en/docs/iot/wb2l-datasheet?id=K9duegc9bualu) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ✔️ | - +❌ | [WB2S](https://developer.tuya.com/en/docs/iot/wb2s-module-datasheet?id=K9ghecl7kc479) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ✔️ | - +❌ | [WB3L](https://developer.tuya.com/en/docs/iot/wb3l-module-datasheet?id=K9duiggw2v8sp) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ✔️ | - +❌ | [WB3S](https://developer.tuya.com/en/docs/iot/wb3s-module-datasheet?id=K9dx20n6hz5n4) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 16 (11 I/O) | ✔️ | ✔️ | - +❌ | [WB3S-IPEX](https://developer.tuya.com/en/docs/iot/wb3sipex-module-datasheet?id=K9irq0laun21z) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 16 (11 I/O) | ✔️ | ✔️ | - +❌ | [WB8P](https://developer.tuya.com/en/docs/iot/wb8p-module-datasheet?id=K9fwx4f89tvzd) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 10 (8 I/O) | ✔️ | ✔️ | - +❌ | [WBLC5](https://developer.tuya.com/en/docs/iot/wblc5-module-datasheet?id=K9duilns1f3gi) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 6 (3 I/O) | ✔️ | ✔️ | - +❌ | [WBLC9](https://developer.tuya.com/en/docs/iot/wblc9-module-datasheet?id=K9hgglry2jp5h) | BK7231T @ 120 MHz | 2 MiB | 256 KiB | 8 (6 I/O) | ✔️ | ✔️ | - +❌ | [CB1S](https://developer.tuya.com/en/docs/iot/cb1s-module-datasheet?id=Kaij1abmwyjq2) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 18 (11 I/O) | ✔️ | ✔️ | - +❌ | [CB2L](https://developer.tuya.com/en/docs/iot/cb2l-module-datasheet?id=Kai2eku1m3pyl) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ✔️ | - +❌ | [CB2S](https://developer.tuya.com/en/docs/iot/cb2s-module-datasheet?id=Kafgfsa2aaypq) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ✔️ | - +❌ | [CB3L](https://developer.tuya.com/en/docs/iot/cb3l-module-datasheet?id=Kai51ngmrh3qm) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 16 (11 I/O) | ✔️ | ✔️ | - +❌ | [CB3S](https://developer.tuya.com/en/docs/iot/cb3s?id=Kai94mec0s076) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 22 (14 I/O) | ✔️ | ✔️ | - +❌ | [CB3S-NL](https://developer.tuya.com/en/docs/iot/CB3S-NL-module-datasheet?id=Kbaesan0vyoms) | BK7231NL (?) @ 120 MHz | 2 MiB | 256 KiB | 22 (14 I/O) | ✔️ | ✔️ | - +❌ | [CB3SE](https://developer.tuya.com/en/docs/iot/CB3SE-Module-Datasheet?id=Kanoiluul7nl2) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 22 (17 I/O) | ✔️ | ✔️ | - +❌ | [CB8P](https://developer.tuya.com/en/docs/iot/cb8p-module-datasheet?id=Kahvig14r1yk9) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 10 (8 I/O) | ✔️ | ✔️ | - +❌ | [CBLC5](https://developer.tuya.com/en/docs/iot/cblc5-module-datasheet?id=Ka07iqyusq1wm) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 6 (3 I/O) | ✔️ | ✔️ | - +❌ | [CBLC9](https://developer.tuya.com/en/docs/iot/cblc9-module-datasheet?id=Ka42cqnj9r0i5) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 8 (6 I/O) | ✔️ | ✔️ | - +❌ | [CBU](https://developer.tuya.com/en/docs/iot/cbu-module-datasheet?id=Ka07pykl5dk4u) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 21 (18 I/O) | ✔️ | ✔️ | - +❌ | [CBU-IPEX](https://developer.tuya.com/en/docs/iot/cbuipex-module-datasheet?id=Kaedsyurckrhu) | BK7231N @ 120 MHz | 2 MiB | 256 KiB | 21 (18 I/O) | ✔️ | ✔️ | - +❌ | [CBU-NL](https://developer.tuya.com/en/docs/iot/CBU-NL-module-datasheet?id=Kbaeq6j53y0yg) | BK7231N (?) @ 120 MHz | 2 MiB | 256 KiB | 21 (18 I/O) | ✔️ | ✔️ | - +❌ | [WR1](https://developer.tuya.com/en/docs/iot/wifiwr1module?id=K9605tc0k90t3) | RTL8710BN @ 125 MHz | 1 MiB | 256 KiB | 18 (11 I/O) | ✔️ | ❌ | - +❌ | [WR1-IPEX](https://developer.tuya.com/en/docs/iot/wifiwr1ipexmodule?id=K9605t977tx5u) | RTL8710BN @ 125 MHz | 1 MiB | 256 KiB | 18 (11 I/O) | ✔️ | ❌ | - +❌ | [WR1E](https://developer.tuya.com/en/docs/iot/wr1e?id=K96smbbeycxtf) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 18 (11 I/O) | ✔️ | ❌ | - +❌ | [WR2](https://developer.tuya.com/en/docs/iot/wifiwr2module?id=K9605tko0juc3) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ❌ | - +❌ | [WR2E](https://developer.tuya.com/en/docs/iot/wr2e?id=K97scnsjhue4h) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 11 (8 I/O) | ✔️ | ❌ | - +❌ | [WR2L](https://developer.tuya.com/en/docs/iot/wifiwr2lmodule?id=K9605tnbj7gva) | RTL8710BX @ 62.5 MHz | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ❌ | - +❌ | [WR2LE](https://developer.tuya.com/en/docs/iot/wr2le?id=K9eio9y9e8i8c) | RTL8710BX @ 62.5 MHz | 2 MiB | 256 KiB | 7 (5 I/O) | ✔️ | ❌ | - +[`wr3`](boards/wr3/README.md) | [WR3](https://developer.tuya.com/en/docs/iot/wr3-module-datasheet?id=K9g3ainzbj9z1) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | `realtek-ambz` +❌ | [WR3E](https://developer.tuya.com/en/docs/iot/wr3e-module-datasheet?id=K9elwlqbfosbc) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | - +❌ | [WR3L](https://developer.tuya.com/en/docs/iot/wifiwr3lmodule?id=K9605tt0kveqm) | RTL8710BX @ 125 MHz (?) | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | - +❌ | [WR3LE](https://developer.tuya.com/en/docs/iot/wr3le?id=K986l7a1ha8tm) | RTL8710BX @ 62.5 MHz | 2 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | - +❌ | [WR3N](https://developer.tuya.com/en/docs/iot/wr3n-datasheet?id=K98zdx31ztdge) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 16 (10 I/O) | ✔️ | ❌ | - +❌ | [WR4](https://developer.tuya.com/en/docs/iot/wifiwr4module?id=K9605tvu78p3e) | RTL8710BN @ 125 MHz | 1 MiB | 256 KiB | 16 (12 I/O) | ✔️ | ❌ | - +❌ | [WR5E](https://developer.tuya.com/en/docs/iot/wr5e?id=K986r9pxqxa8i) | RTL8710BX @ 62.5 MHz | 2 MiB | 256 KiB | 15 (12 I/O) | ✔️ | ❌ | - +❌ | [WR6-H](https://developer.tuya.com/en/docs/iot/wr6h-module-datasheet?id=K9pork8eeowgl) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 18 (12 I/O) | ✔️ | ❌ | - +❌ | [WR6](https://developer.tuya.com/en/docs/iot/wr6-datasheet?id=K97rp45u6gff9) | RTL8710BN @ 125 MHz | 2 MiB | 256 KiB | 18 (12 I/O) | ✔️ | ❌ | - +❌ | [WRG1](https://developer.tuya.com/en/docs/iot/wr6-datasheet?id=K97rp45u6gff9) | RTL8711AM @ 166 MHz | 4 MiB | 2048 KiB | 25 (20 I/O) | ✔️ | ❌ | - +❌ | [XR1](https://developer.tuya.com/en/docs/iot/xr1?id=K9lq3y9xo0zkx) | XR809 @ 160 MHz | 2 MiB | 384 KiB | 18 (11 I/O) | ✔️ | ❌ | - +❌ | [XR1-IPEX](https://developer.tuya.com/en/docs/iot/xr1ipex-module-datasheet?id=K9razqu9gqele) | XR809 @ 160 MHz | 2 MiB | 384 KiB | 18 (11 I/O) | ✔️ | ❌ | - +❌ | [XR3](https://developer.tuya.com/en/docs/iot/xr3-datasheet?id=K98s9168qi49g) | XR809 @ 160 MHz | 2 MiB | 384 KiB | 22 (17 I/O) | ✔️ | ❌ | - +❌ | [WE1S](https://developer.tuya.com/en/docs/iot/wifie1smodule?id=K9605thnvg3e7) | ESP8266EX @ 80/160 MHz | 2 MiB | 36 KiB | 18 (11 I/O) | ✔️ | ❌ | - +❌ | [WE2L](https://developer.tuya.com/en/docs/iot/wifie2lmodule?id=K9605ud0gkjmh) | ESP8285 @ 80/160 MHz | 1 MiB | 50 KiB | 7 (5 I/O) | ✔️ | ❌ | - +❌ | [WE2S](https://developer.tuya.com/en/docs/iot/wifie2smodule?id=K9605u79tgxug) | ESP8285 @ 80/160 MHz | 1 MiB | 50 KiB | 11 (8 I/O) | ✔️ | ❌ | - +❌ | [WE3L](https://developer.tuya.com/en/docs/iot/wifie3lpinmodule?id=K9605uj1ar87n) | ESP8266 @ 80/160 MHz | 2 MiB | 50 KiB | 16 (12 I/O) | ✔️ | ❌ | - +❌ | [WE3S](https://developer.tuya.com/en/docs/iot/wifie3smodule?id=K9605ua1cx9tv) | ESP8266 @ 80/160 MHz | 2 MiB | 50 KiB | 16 (12 I/O) | ✔️ | ❌ | - +❌ | [WE3SE](https://developer.tuya.com/en/docs/iot/we3se?id=K97qv6ab7oh8d) | ESP32 @ 240 MHz | 4 MiB | 520 KiB | 22 (17 I/O) | ✔️ | ✔️ | - +❌ | [WE5P](https://developer.tuya.com/en/docs/iot/wifie5pmodule?id=K9605um3dtjbx) | ESP8266 @ 80/160 MHz | 1 MiB | 50 KiB | 15 (11 I/O) | ✔️ | ❌ | - + +\* Only modules featuring at least Wi-Fi. WBR, JWBR, CR, (TY)JW and (TY)LC Series are not included here + +** I/O count includes GPIOs, ADCs, PWM outputs and UART, but doesn't count CEN/RST and power pins. + +## Platforms + +A list of platforms currently available in this project. + +Platform name | Supported MCU(s) | Arduino Core | Source SDK (PIO framework) +---------------|------------------------------------------------------------------------|--------------|-------------------------------------------------------------------------- +`realtek-ambz` | Realtek [AmebaZ](https://www.amebaiot.com/en/amebaz/) SoC (`RTL87xxB`) | ❌ | `framework-realtek-amb1` ([amb1_sdk](https://github.com/ambiot/amb1_sdk)) diff --git a/boards/wr3/README.md b/boards/wr3/README.md new file mode 100644 index 0000000..481d244 --- /dev/null +++ b/boards/wr3/README.md @@ -0,0 +1,39 @@ +# WR3 Wi-Fi Module + +[Product page](https://developer.tuya.com/en/docs/iot/wifiwr1module?id=K9605tc0k90t3) + +Parameter | Value +-------------|------------------------- +MCU | RTL8710BN +Manufacturer | Realtek +Series | AmebaZ +Max. clock | 125 MHz +Flash size | 2 MiB +RAM size | 256 KiB +Voltage | 3.0V - 3.6V +I/O | 7x GPIO, 2x UART, 1x ADC +Wi-Fi | 802.11 b/g/n + +## Pinout + +![image](pinout.png) + +## Arduino core pin map + +No. | Pin | Alt. function | PWM +----|-------|---------------|----- +D0 | PA_22 | | PWM5 +D1 | PA_19 | | +D2 | PA_14 | | PWM0 +D3 | PA_15 | | PWM1 +D4 | PA_0 | | PWM2 +D5 | PA_20 | | +D6 | PA_29 | UART_Log_RXD | PWM4 +D7 | PA_30 | UART_Log_TXD | PWM3 +D8 | PA_5 | | PWM4 +D9 | PA_12 | | PWM3 +D10 | PA_18 | UART0_RXD | +D11 | PA_23 | UART0_TXD | PWM0 +A0 | PA_19 | | +A1 | - | | +A2 | PA_20 | | diff --git a/boards/wr3/pinout.png b/boards/wr3/pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..619638e1392b1aaa1cc2efe0d6512341eaaa158e GIT binary patch literal 29531 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 literal 0 HcmV?d00001