查看: 3040|回复: 23

支持双频WiFi和蓝牙ble5.0的Arduino开发板:Ameba RTL8720DN rtlduino

[复制链接]

该用户从未签到

发表于 2020-11-16 19:02 | 显示全部楼层 |阅读模式

在制作Arduino相关的物联网项目时,esp8266和esp32开发板很受大家的欢迎,它们价格低廉,易于开发,且具有连接WiFi的能力。
但是它们也存在一些问题,最大的问题在于,它们只支持2.4GHz的wifi网络,这种网络不够稳定,很容易受到干扰。
所以在此介绍一个WiFi芯片:RTL8720DN,它支持5G WiFi,价格低廉,且可以用Arduino开发.

该用户从未签到

 楼主| 发表于 2021-3-20 13:38 | 显示全部楼层
本帖最后由 a2302004040 于 2021-4-9 19:22 编辑
a2302004040 发表于 2020-11-16 19:12
1.平台安装
打开你的Arduino IDE, 打开"首选项"->附加开发板管理器网址,加入下面这一行网址:
保存,进入开 ...

OHHHHHHH! 现在官方加入了对于这个开发板的支持!打开你的Arduino IDE, 打开"首选项"->附加开发板管理器网址,加入下面这一行网址:
[color=var(--color-text-link)]https://github.com/ambiot/ambd_arduino/raw/master/Arduino_package/package_realtek.com_amebad_early_index.json
现在不再需要替换任何文件,开发板选择RTL8720DN(BW16)即可直接使用

使用GPIO时直接输入引脚名 例如PA12,PB1即可。不要直接输入数字或者带下划线的PA_12等。

三个ADC输入:A0,A1,A2分别是PB1,PB2,PB3,直接analogRead(A0)即可

支持PWM输出(analogWrite,tone)的引脚是PA12,PA13,PA25,PA26

串口Serial是板载的USB转串口芯片,TXB1,RXB2
串口Serial1是用来下载固件的串口,TXA7,RXA8

SPI: PA12,13,14,15->MOSI,MISO,CLK,CS,最高速度50MHz
I2C(Wire): PA25->SCL,PA26->SDA




该用户从未签到

发表于 2021-1-16 15:00 | 显示全部楼层
管理器地址不正确

该用户从未签到

 楼主| 发表于 2020-11-16 19:04 | 显示全部楼层
本帖最后由 a2302004040 于 2020-12-23 23:55 编辑

本教程基于此开发板.

ps.这块开发板在淘宝就可以买到, 我的到手价不到30元, 官方的开发板则贵得多

该用户从未签到

 楼主| 发表于 2020-11-16 19:12 | 显示全部楼层
1.平台安装
打开你的Arduino IDE, 打开"首选项"->附加开发板管理器网址,加入下面这一行网址:
  1. https://github.com/ambiot/ambd_arduino/raw/master/Arduino_package/package_realtek.com_amebad_index.json
复制代码
保存,进入开发板管理器,拉到最下面,选择安装"Realtek Ameba Boards"
下载开发板.PNG
等待安装完成.
之后,在Arduino主界面选择"工具"->"开发板"->"Ameba ARM (32-bits) boards"->"RTL8722DM/RTL8722CSM"
平台的安装就完成了.

该用户从未签到

 楼主| 发表于 2020-11-16 19:19 | 显示全部楼层
可能有些眼尖的小伙伴已经发现了,我们选择的开发板("RTL8722DM/RTL8722CSM")和本文的目标("RTL8720DN")对不上号...
不过这不是什么大问题,因为RTL8722的开发板非常贵(~300RMB),对于国内创客来说很不划算
并且RTL8720DN只是RTL8722的精简版,两者的SDK可以通用,只是前者缺少一些GPIO而已.

该用户从未签到

 楼主| 发表于 2020-11-16 19:39 | 显示全部楼层
2.点灯

由于官方只适配了官方的开发板,而官方开发板和教程中使用的开发板引脚数量不同,因此我们需要更改引脚的分配才能正常使用。
1-打开如下这个文件(其中的3.0.6是当前版本,之后可能不同)(假设你使用默认安装路径,如果不是,请自行查找这个文件)
  1. C:\Users\user\AppData\Local\Arduino15\packages\realtek\hardware\AmebaD\3.0.6\variants\rtl8721d\variant.cpp
复制代码

2-修改分配:

  1. /*
  2. * Pins descriptions
  3. */
  4. PinDescription g_APinDescription[TOTAL_GPIO_PIN_NUM]=
  5. {
  6.     {PB_2,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D0
  7.     {PB_1,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D1
  8.     {PB_3,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D2
  9.     {PB_31,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D3
  10.     {PB_30,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D4
  11.     {PB_28,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D5
  12.     {PB_29,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D6
  13.     {NC,       NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //D7
  14.     {PB_22,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D8
  15.     {PB_23,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D9
  16.     {PB_21,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D10
  17.     {PB_18,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D11
  18.     {PB_19,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D12
  19.     {PB_20,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D13
  20.     {PA_7,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D14
  21.     {PA_8,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D15
  22.     {PA_25,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D16
  23.     {PA_26,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D17
  24.     {PB_7,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D18
  25.     {PB_6,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D19
  26.     {PB_5,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D20
  27.     {PB_4,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D21
  28.     {PA_28,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D22
  29.     {PA_24,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D23
  30.     {PA_23,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //D24
  31.     {PA_22,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D25
  32.     {PA_21,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D26
  33.     {PA_20,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //D27
  34.     {PA_19,    NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}  //D28
  35. };
复制代码
改为
  1. /*
  2. * Pins descriptions
  3. */
  4. PinDescription g_APinDescription[TOTAL_GPIO_PIN_NUM]=
  5. {
  6.     {PA_7,      NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 0, Serial(0) TX
  7.     {PA_8,      NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 1, Serial(0) RX
  8.     {PA_27,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 2
  9.     {PA_30,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 3
  10.     {PB_1,      NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 4, A4, Recommended Serial2 TX
  11.     {PB_2,      NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 5, A5, Recommended Serial2 RX
  12.     {PB_3,      NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 6, A6,
  13.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //7
  14.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //8
  15.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //9
  16.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //10
  17.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //11
  18.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //12
  19.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //13
  20.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //14
  21.     {NC,        NOT_INITIAL, NOT_INITIAL                          , NOT_INITIAL}, //15
  22.     {PA_25,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //Arduino pin 16, PWM, Default Serial2 TX, I2C0 SCL, IR TX
  23.     {PA_26,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //Arduino pin 17, PWM, Default Serial2 RX, I2C0 SDA, IR RX
  24.     {PA_15,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 18, SPI1 CS
  25.     {PA_14,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ              , NOT_INITIAL}, //Arduino pin 19, SPI1 CLK, GREEN LED
  26.     {PA_13,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}, //Arduino pin 20, SPI1 MISO, PWM, BLUE LED
  27.     {PA_12,     NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM    , NOT_INITIAL}  //Arduino pin 21, SPI1 MOSI, PWM, RED LED
  28. };
复制代码


3-修改GPIO数量:
打开
  1. C:\Users\user\AppData\Local\Arduino15\packages\realtek\hardware\AmebaD\3.0.6\variants\rtl8721d\variant.h
复制代码

  1. #define TOTAL_GPIO_PIN_NUM            (29)
复制代码
改为
  1. #define TOTAL_GPIO_PIN_NUM            (22)
复制代码
保存修改即可.

该用户从未签到

 楼主| 发表于 2020-11-17 22:33 | 显示全部楼层
感觉有好几楼被吞了,我还是做成pdf文档有时间发上来吧..

该用户从未签到

 楼主| 发表于 2020-11-18 22:00 | 显示全部楼层
1.点灯(下)
之后让我们尝试官方的Blink程序。需要注意的是,LED_BUILTIN在这个开发板上并不可用,你需要把它替换为19,20或21.


void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(19, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(19, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(19, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}


点击菜单栏里的对勾,代码应该可以成功通过编译。否则请检查之前的步骤是不是改错了什么东西。

接下来就要将代码上传到开发板上了,这也是这个开发板的第一个坑点:
这个芯片上传程序的串口是LOG_TX(PA7)和LOG_RX(PA8),而这个开发板的板载USB转串口芯片连接的是串口0:TX_0(PB1)和RX_0(PB2).
你可以使用另一个USB转串口模块来连接LOG_TX和LOG_RX串口,不过你也可以用两条线将PA7与PB1相连,PA8与PB2相连,这样就可以利用板载的USB转串口芯片上传程序。

这个开发板并没有自动下载的电路,你需要手动操作来进入下载模式:
在开发板通电的情况下,首先按住开发板右侧的"Burn"按钮不要松开,之后短按一下左侧的”RST“按钮,之后松开"Burn"按钮。此时以115200波特率打开串口监视器,如果你看见有方块在不断出现,那么已经进入了下载模式。
下载模式串口输出.PNG
之后你就可以点击上传按钮,将程序烧录到开发板中。需要注意的是,在上传成功后你的程序并不会自动开始执行,你需要再手动按一次"RST"按钮。

这时你应该可以看到板载的绿灯在闪烁,这标志着你已经成功完成了以上所有的步骤。

胜利的绿光!

胜利的绿光!

该用户从未签到

 楼主| 发表于 2020-12-23 23:52 | 显示全部楼层
2. 5G WiFi
这个开发板最大的亮点就是支持5G WiFi,并且使用起来也非常简单。

2.1 连接5G WiFi:
代码和Arduino WiFi库的基本一致。只要指定5G的WiFi ssid和密码,就可以直接连接,无需特殊的设置。

2.2 5G WiFi热点:直接上代码:

#include <WiFi.h>

char ssid[] = "yourNetwork";  //设置SSID
char pass[] = "Password";     //设置密码
char channel[] = "1";         //设置wifi信道. 如果要使用5G Wifi, 直接设置到对应的信道,比如52或153即可
int ssid_status = 0;           //是否隐藏ssid, 为1则隐藏

void setup() {
    //初始化串口
    Serial.begin(115200);

    int status = WL_IDLE_STATUS;  
    //启动WiFi热点
    while (status != WL_CONNECTED) {
        Serial.print("Attempting to start AP with SSID: ");
        Serial.println(ssid);
        status = WiFi.apbegin(ssid, pass, channel, ssid_status);
        delay(10000);
    }

    //热点已启动
    Serial.println("AP mode already started");
    Serial.println();
}

void loop() {
}


该用户从未签到

 楼主| 发表于 2020-12-25 22:43 | 显示全部楼层
Screenshot_20201225-223402.png
补图,第二个就是rtl8720的热点,此时信道为161,可以看到是5G wifi



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

8266多次重启后出错,conn deviceRegister, _register_times: 2
8266多次重启后出错,conn
8266多次重启有几率连接不上是怎么回事 就会出现上图的情况,一直持续很久。 这个错
Arduino IDE 支持Raspberry Pi Pico开发
Arduino IDE 支持Raspberr
Arduino已经发布了他们的Arduino Nano RP2040 Connect开发板,这是最近发布的Raspberr
VS code编译报错
VS code编译报错
该设置的路径都设置了,网上查,有大神说把WProgram.h改成arduino.h就好了,但是我没
基于麦克纳姆轮的PID实例学习--机甲大师PID控制
基于麦克纳姆轮的PID实例
一 认识pid 首先要了解PID算法是什么。网上很多帖子要么就是只有理论,要么就没讲清
为什么我只要启用串口监视器,有个灯就不亮了??
为什么我只要启用串口监视
Serial.begin(9600); 为什么我只要写了这句,有一盏灯就不亮了?(应该显示的是数字2
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表