支持双频WiFi和蓝牙ble5.0的Arduino开发板:Ameba RTL8720DN rtlduino
在制作Arduino相关的物联网项目时,esp8266和esp32开发板很受大家的欢迎,它们价格低廉,易于开发,且具有连接WiFi的能力。
但是它们也存在一些问题,最大的问题在于,它们只支持2.4GHz的wifi网络,这种网络不够稳定,很容易受到干扰。
所以在此介绍一个WiFi芯片:RTL8720DN,它支持5G WiFi,价格低廉,且可以用Arduino开发.
本帖最后由 a2302004040 于 2021-4-9 19:22 编辑
a2302004040 发表于 2020-11-16 19:12
1.平台安装
打开你的Arduino IDE, 打开"首选项"->附加开发板管理器网址,加入下面这一行网址:
保存,进入开 ...
OHHHHHHH! 现在官方加入了对于这个开发板的支持!打开你的Arduino IDE, 打开"首选项"->附加开发板管理器网址,加入下面这一行网址:
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转串口芯片,TX:PB1,RX:PB2
串口Serial1是用来下载固件的串口,TX:PA7,RX:PA8
SPI: PA12,13,14,15->MOSI,MISO,CLK,CS,最高速度50MHz
I2C(Wire): PA25->SCL,PA26->SDA
管理器地址不正确 本帖最后由 a2302004040 于 2020-12-23 23:55 编辑
本教程基于此开发板.https://gd2.alicdn.com/imgextra/i3/2922621297/O1CN01mCcDCR1LS4KNc509V_!!2922621297.jpg_400x400.jpg
ps.这块开发板在淘宝就可以买到, 我的到手价不到30元, 官方的开发板则贵得多
1.平台安装
打开你的Arduino IDE, 打开"首选项"->附加开发板管理器网址,加入下面这一行网址:
https://github.com/ambiot/ambd_arduino/raw/master/Arduino_package/package_realtek.com_amebad_index.json保存,进入开发板管理器,拉到最下面,选择安装"Realtek Ameba Boards"
等待安装完成.
之后,在Arduino主界面选择"工具"->"开发板"->"Ameba ARM (32-bits) boards"->"RTL8722DM/RTL8722CSM"
平台的安装就完成了.
可能有些眼尖的小伙伴已经发现了,我们选择的开发板("RTL8722DM/RTL8722CSM")和本文的目标("RTL8720DN")对不上号...
不过这不是什么大问题,因为RTL8722的开发板非常贵(~300RMB),对于国内创客来说很不划算
并且RTL8720DN只是RTL8722的精简版,两者的SDK可以通用,只是前者缺少一些GPIO而已. 2.点灯
由于官方只适配了官方的开发板,而官方开发板和教程中使用的开发板引脚数量不同,因此我们需要更改引脚的分配才能正常使用。
1-打开如下这个文件(其中的3.0.6是当前版本,之后可能不同)(假设你使用默认安装路径,如果不是,请自行查找这个文件)
C:\Users\user\AppData\Local\Arduino15\packages\realtek\hardware\AmebaD\3.0.6\variants\rtl8721d\variant.cpp
2-修改分配:
将
/*
* Pins descriptions
*/
PinDescription g_APinDescription=
{
{PB_2, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D0
{PB_1, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D1
{PB_3, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D2
{PB_31, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D3
{PB_30, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D4
{PB_28, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D5
{PB_29, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D6
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //D7
{PB_22, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D8
{PB_23, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D9
{PB_21, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D10
{PB_18, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D11
{PB_19, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D12
{PB_20, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D13
{PA_7, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D14
{PA_8, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D15
{PA_25, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D16
{PA_26, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D17
{PB_7, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D18
{PB_6, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D19
{PB_5, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D20
{PB_4, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D21
{PA_28, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D22
{PA_24, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D23
{PA_23, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //D24
{PA_22, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D25
{PA_21, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D26
{PA_20, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //D27
{PA_19, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}//D28
};
改为/*
* Pins descriptions
*/
PinDescription g_APinDescription=
{
{PA_7, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 0, Serial(0) TX
{PA_8, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 1, Serial(0) RX
{PA_27, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 2
{PA_30, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 3
{PB_1, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 4, A4, Recommended Serial2 TX
{PB_2, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 5, A5, Recommended Serial2 RX
{PB_3, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 6, A6,
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //7
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //8
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //9
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //10
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //11
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //12
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //13
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //14
{NC, NOT_INITIAL, NOT_INITIAL , NOT_INITIAL}, //15
{PA_25, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //Arduino pin 16, PWM, Default Serial2 TX, I2C0 SCL, IR TX
{PA_26, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //Arduino pin 17, PWM, Default Serial2 RX, I2C0 SDA, IR RX
{PA_15, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 18, SPI1 CS
{PA_14, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ , NOT_INITIAL}, //Arduino pin 19, SPI1 CLK, GREEN LED
{PA_13, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}, //Arduino pin 20, SPI1 MISO, PWM, BLUE LED
{PA_12, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM , NOT_INITIAL}//Arduino pin 21, SPI1 MOSI, PWM, RED LED
};
3-修改GPIO数量:
打开
C:\Users\user\AppData\Local\Arduino15\packages\realtek\hardware\AmebaD\3.0.6\variants\rtl8721d\variant.h
将
#define TOTAL_GPIO_PIN_NUM (29)改为
#define TOTAL_GPIO_PIN_NUM (22)保存修改即可.
感觉有好几楼被吞了,我还是做成pdf文档有时间发上来吧.. 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波特率打开串口监视器,如果你看见有方块在不断出现,那么已经进入了下载模式。
之后你就可以点击上传按钮,将程序烧录到开发板中。需要注意的是,在上传成功后你的程序并不会自动开始执行,你需要再手动按一次"RST"按钮。
这时你应该可以看到板载的绿灯在闪烁,这标志着你已经成功完成了以上所有的步骤。
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() {
}
补图,第二个就是rtl8720的热点,此时信道为161,可以看到是5G wifi