感谢联盛德微电子和面包板社区提供的开发板,下面是开发板的上手测试,包括开发板外观简单介绍和基于Arduino IDE的环境搭建及基础功能实现。
W800芯片是一款安全IoTWi-Fi/蓝牙双模SoC芯片。支持2.4GIEEE802.11b/g/nWi-Fi通讯协议;支持BT/BLE双模工作模式,支持BT/BLE4.2协议。芯片集成32位CPU处理器,内置QFlash、SPI、UART、GPIO、I2C、I2S、7816等丰富的数字接口;支持多种硬件加解密算法,内置DSP、浮点运算单元与安全引擎,支持代码安全权限设置,内置2MBFlash存储器,支持固件加密存储、固件签名、安全调试、安全升级等多项安全措施,保证产品安全特性。适用于用于智能家电、智能家居、智能玩具、无线音视频、工业控制、医疗监护等广泛的物联网领域。前言
1. 概述
本测评为W800_arduino V4.0开发板基于Arduino IDE的基础功能实现,主要尝试了三色灯控制、按键输入功能、PWM输出功能、AD转换与串口功能、四线IIC_OLED显示功能。
熟悉Arduino IDE使用的读者可以直接进行添加开发板支持操作。注意,基于已有资料,推荐Arduino IDE 1.8.15以上。其中,网上查到数篇资料为基于Arduino IDE 1.8.19版本的开发板支持配置,本人实测1.8.18和2.3.3都成功了(网传2.3.3不支持,可能原因是尝试了1.8.19的开发板管理器地址)。
使用步骤分为:安装Arduino IDE(略)、CH340串口驱动安装(略)、添加开发板管理器地址、在开发板管理器中安装开发板支持环境。
首次安装和使用Arduino IDE软件的,可能需要安装CH340串口驱动。对于IDE软件和串口驱动的下载安装,网上有大把资源和教程,此处重点介绍在线安装开发板支持环境和编写的几个例程。成功安装CH340驱动后,用USB-C数据线连接电脑和开发板,开发板可以被电脑识别到2个串口,只有一个支持Arduino IDE下载程序。至于是哪一个,具体可以到后面程序下载的步骤进行更换尝试。也请专业人士解释一下2个串口的区别和识别使用方法。
如上图所示,开发板所有器件布置在了正面。
(1)开发板板载CH340驱动芯片,用户可以通过板上USB-C口通过一根数据线实现程序下载(也称“上传”)。
(2)板载一只三色LED灯,对应芯片PB0~PB2三只引脚,并通过一块3路拨码开关分别控制引脚通断。
(3)开发板提供了三只贴片按键,其中SW1连接芯片RST引脚,按下松开则向芯片RST输入一个低电平,实现芯片复位。下载程序时也需要在程序执行下载前进行1次复位。SW2为用户预留按键,连接芯片PB5引脚,电路上作了硬件上拉设计,低有效。SW3为BOOT按键,内连芯片PA0引脚。
(4)由于开发板支持无线功能,板载了天线和外置天线接口J3。J3附近丝印了Winner Micro(北京联盛德微电子有限责任公司)的标识及网址。并注明了该开发板的型号及版本号:W800_ARDUINO_V4.0。
(5)开发板供电问题,推荐通过USB接口或板上丝印“+5V”处接入5V直流电。如此,开发板丝印3V3处还可以向外提供3.3V电压。不推荐使用开发板为电流型器件(如线圈型继电器)供电,如需使用,请先查找相关参数确认。
(6)芯片各功能引脚分别引向8组杜邦插座或杜邦插针,其中开发板正面丝印标示了引脚的主要功能,开发板背面引脚为芯片引脚编号(用于编程),如下图。
由于多数引脚是功能复用的,所以启用不同功能时,通常还需要结合用户文档(使用指导),详见参考文献【7-8】,封面如下图所示。
开发板背面还贴出了技术支持的群二级码,用户可以申请加入并与群内技术人员提问交流。
从功能标识来看,开发板资源丰富,提供了几乎所有常用单片机功能。加之板载无线功能,且主频较高,性能上碾压普通的arduino UNO板。
这里提醒一点,板上VIN并非供电输入引脚!板上丝印VIN处,内部引向芯片PA1引脚,可用作普通IO引脚或限压2.3V的AD输入引脚,并非Arduino UNO板上的7~12V直流供电输入引脚!对于有些带VIN供电的UNO拓展板使用前请务必确定这一点。
第一部分:在线安装开发板支持环境
添加开发板支持,共分两步:添加开发板管理器地址,在开发板管理器中安装开发板支持环境。由于我先在2.3.3上尝试1.8.18开发板管理器地址失败(开发板管理器中检索不到“w80”),后来尝试了网上其它开发板管理器地址后成功。不同的开发板管理器地址在不同的IDE版本软件中可能不通用,请多尝试几个。另外,也可以按参考文献【1】中的方法,尝试手动添加开发板。以下,区别2个版本介绍在线添加开发板过程:
1.基于Arduino IDE 1.8.18
(1)添加开发板管理器地址
打开“文件-首选项-设置-附加开发板管理器网址”,另起一行添加以下网址:
http://dl.isme.fun/w80x_arduino/package_w80x_index.json
事实上,地址并不唯一,读者可以自行网上搜索并尝试其它。但可能该网址不支持在2.3.3中使用。
(2)在线安装开发板支持
打开“工具-开发板-开发板管理…”,在开发板管理器搜索栏输入“w80”并检索安装支持文件。1.8.18等版本此处索引可能较慢,请耐心等待。
建议安装高版本。安装后就可以设置开发板,并打开对应的示例程序了。
(3)设置开发板型号等参数
注意,下载时尝试2个串口中的哪个串口可以支持程序下载。
(4)打开示例程序并下载运行
打开“文件-示例-W800的例子-BasicsExample-Blink”,如图:
可以在程序窗口看到如下程序:
编译后,点击快捷菜单中的第二个图标,即开始上传程序:
点击上传图标后,程序开始执行下载操作,当出现下面界面时,请按一下SW1键,使单片机完成复位,顺利进入程序上传进程。
按下SW1完成复位后,程序开始下载,如图:
下载完成后,显示下载成功,如图:
上述下载进程耗时约10秒,可能也与程序大小、操作系统或电脑性能有关。
注意,若在程序正在上传的过程中单片机再次被复位(如不小心又按到SW1),将导致下载失败。
程序下载完成后就可以观察开发板,开发板此时已经自动执行LED灯闪烁程序(绿灯间隔1秒亮灭)。
2.基于Arduino IDE 2.3.3
(1)添加开发板管理器地址
打开“文件-首选项-设置-其它开发板管理器地址”,另起一行添加以下网址:
https://cdn.jsdelivr.net/gh/Hi-LinkDuino/w80x_arduino/package_w80x_proxy_index.json
此前尝试不同的开发板管理器地址过程中,有些地址不并好用(例如在2.3.3版本中尝试1.8.19的开发板管理器地址可能出现检索不到开发板型号的情况)。如Github上也指出,还可以尝试:
https://cdn.jsdelivr.net/gh/Hi-LinkDuino/w80x_arduino/package_w80x_index.json
(2)在线安装开发板支持
打开“工具-开发板-开发板管理…”,或直接在左侧单击添加开发板的快捷图标,在开发板管理器搜索栏输入“w80”并检索安装支持文件。
不能用的网址可能导致这一步搜索不到w80x支持包。若发现搜索不到,请检查添加的开发板网址或更换网址,或者手动添加开发板支持包。
建议安装高版本。安装后就可以设置开发板,并打开对应的示例程序了。
(3)设置开发板型号等参数
注意,下载时尝试2个串口中的哪个串口可以支持程序下载。
(4)打开示例程序并下载运行
打开“文件-示例-W800的例子-BasicsExample-Blink”,如图:
可以在程序窗口看到如下程序:
编译后,点击快捷菜单中的第二个图标,即开始上传程序:
点击上传图标后,程序开始执行下载操作,当出现下面界面时,请按一下SW1键,使单片机完成复位,顺利进入程序上传进程。
若长时间未按SW1这个单片机复位键,程序还会进一步提示你手动按一下复位键:
按一下复位键后,自动转入上传程序的进程:
成功上传后,会提示上传程序成功:
上述下载进程耗时约10秒,可能也与程序大小、操作系统或电脑性能有关。
注意,若在程序正在上传的过程中单片机再次被复位(如不小心又按到SW1),将导致下载失败。
程序下载完成后就可以观察开发板,开发板此时已经自动执行LED灯闪烁程序(绿灯间隔1秒亮灭)。其它程序及操作均与上一部分相同,不再赘述。
第二部分:W800_Arduino V4.0基础功能测试
主要测试了三色灯控制、按键输入、PWM输出、串口与AD功能、4线IIC OLED显示功能,程序在1.8.18和2.3.3中无差异运行。IDE设置和相关操作参见第一部分。
1. 数字引起输出功能(以LED三色灯为例)
通过观察原理图可知,上述三色LED灯均为低有效。根据引脚命名规律,尝试其它两种颜色和拨码器对应控制,可以尝试以下程序。另外, Arduino IDE本身默认支持Arduino.h等,上面示例程序中的前两头文件声明包含语句,实测可以省略。
int led_r = LED_BUILTIN_2;
int led_g = LED_BUILTIN_1;
int led_b = LED_BUILTIN_3;
void setup()
{
pinMode(led_r, OUTPUT);
pinMode(led_g, OUTPUT);
pinMode(led_b, OUTPUT);
}
void loop()
{
digitalWrite(led_r, LOW); //输出低,对应红灯亮,拨码1控制
digitalWrite(led_g, LOW); //输出低,对应绿灯亮,拨码2控制
digitalWrite(led_b, LOW); //输出低,对应蓝灯亮,拨码3控制
}
上述程序将三色LED通过控制相应GPIO引脚输出低而点亮。可以将3位拨码先全部拨至off状态,再分别单独拨动拨码开关,验证拨码和灯色关系。
查看原理图可知,三色LED灯红绿蓝分别对应的单片机引脚是PB1、PB0、PB2,可以进一步修改三色LED灯交替亮起的程序如下:
int led_r = PB1; //红灯,低有效
int led_g = PB0; //绿灯,低有效
int led_b = PB2; //蓝灯,低有效
void setup()
{
pinMode(led_r, OUTPUT); digitalWrite(led_r,HIGH); //初始化后输出高,对应灯灭
pinMode(led_g, OUTPUT); digitalWrite(led_g,HIGH);
pinMode(led_b, OUTPUT); digitalWrite(led_b,HIGH);
}
void loop()
{
digitalWrite(led_r, LOW); delay(1000); digitalWrite(led_r, HIGH); //红灯亮起1秒后熄灭
digitalWrite(led_g, LOW); delay(1000); digitalWrite(led_g, HIGH);
digitalWrite(led_b, LOW); delay(1000); digitalWrite(led_b, HIGH);
}
2. 数字引脚输入功能
板载SW2按键,查看原理图可知为硬件上拉输入,即声明为输入后,默认输入高电平,按下时输入低电平,按此逻辑可设置SW2按下使红灯亮。其余另找两路IO分别控制绿灯和蓝灯(可通过杜邦线接GND或3.3V,无硬件上拉)。注意IO口高电平为3.3V,误接5V可能导致损坏。
如图,可选PA7控制绿灯,PA1控制蓝灯。(低有效,引脚接GND时对应灯亮)
int led_r = PB1, led_g = PB0, led_b = PB2;
int SW2 = PB7; ///* 按键SW2为PB7 , */
int key_g = PA7, key_b = PA1;
void setup()
{
pinMode(led_r,OUTPUT); digitalWrite(led_r,HIGH);
pinMode(led_g,OUTPUT); digitalWrite(led_g,HIGH);
pinMode(led_b,OUTPUT); digitalWrite(led_b,HIGH);
pinMode(SW2,INPUT); //自带硬件上拉,见原理图
pinMode(key_g,INPUT_PULLUP); //声明启用内部上拉输入
pinMode(key_b,INPUT); //普通输入,无上拉
}
void loop()
{
digitalWrite(led_r,digitalRead(SW2));
digitalWrite(led_g,digitalRead(key_g));
digitalWrite(led_b,digitalRead(key_b));
}
由于SW2电路为硬件上拉,程序中绿灯控制引脚声明为内部上拉输入,因此抗干扰能力较好。而蓝灯由于无上拉输入,可能运行出现BUG(如未接低电平时也亮或闪烁)。
功能验证成功,可知该单片机数字IO支持内部上拉输入,与Arduino UNO开发板引脚功能及使用方法相同。
3. 数字引脚PWM输出功能
W800数字IO的PWM输出功能声明语法与UNO板的编程有所区别。UNO板支持PWM的引脚输出PWM语法形如:
pinMode(pin,OUTPUT);
analogWrite(pin,Duty);
其中,pin为支持PWM输出功能的引脚(3,5,6,9,10,11);Duty为占空比控制,为0~255之间的整数,对应占空比0%~100%。
而W800的PWM输出功能启用及输出语句为:
pinMode(pin,PWM_OUT);
analogWrite(pin,Duty);
查看开发板原理图及参考文档可知,支持PWM输出功能的引脚有PB0~PB3和PA7共5路,分别对应开发板上标注PWM0~PWM4。其中,PB0~PB2恰好对应三色LED,因此PWM示例程序就是采用多色LED灯展示的PWM功能,色彩绚丽,用户可自行尝试:
也可编写简单的PWM输出测试例程,如通过拨码开关断开三色LED,控制PWM0~PWM4输出不同占空比的固定PWM波并用示波器观察。程序如下:
int pwm0 = PB0, pwm1 = PB1, pwm2 = PB2, pwm3 = PB3, pwm4 = PA7;
void setup()
{
pinMode(pwm0,PWM_OUT);
pinMode(pwm1,PWM_OUT);
pinMode(pwm2,PWM_OUT);
pinMode(pwm3,PWM_OUT);
pinMode(pwm4,PWM_OUT);
}
void loop()
{
analogWrite(pwm0,26); // 约10%占空比,255*10/100=25.5
analogWrite(pwm1,64); // 约25%占空比,255*25/100=63.75
analogWrite(pwm2,128); // 约50%占空比,127.5
analogWrite(pwm3,191); // 约75%占空比,255*75/100=191.25
analogWrite(pwm4,255); // 约100%占空比
}
设定为占空比75%的pwm3通过波形如下:
4. AD转换与串口功能
W800芯片基于 Sigma-Delta ADC 的采集模块,集成 4 路 16 比特 ADC,完成最多 4 路(芯片PA1~PA4)模拟信号的采集,或两路差分信号采集,采样率通过外部输入时钟控制,最高采样率 1KHz,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。开发板的说明文档(见参考文献【7】)中强调了输入电压限制为0~2.3V,如图:
下载执行如下例程:
void setup()
{
pinMode(PA1,ANALOG_INPUT);
Serial.begin(115200);
}
void loop()
{
Serial.println(analogRead(PA1));
delay (1000);
}
实测PA1引脚输入2V时,串口输出约1990;引脚输入1V时,串口输出约980,几乎可以分辨1mV电压。更多ADC性能描述,开发板的说明文档里并没有详细介绍。通过观察开发板可知,4路AD仅PA1和PA4引出了,且与IIC复用。另2路未引出?占用?
5. 四线IIC_OLED12864功能演示注意OLED模块VCC可接开发板3.3V供电,其余三根线正常按开发板丝印对应接线即可。连接OLED至开发板后,打开示例程序如下:
注意在示例程序中修改对应自已OLED的驱动支持。其中,示例默认为OLED驱动为下图第7行,即SSH1106_128*64,如图:
由于我的OLED模块的驱动是SSD1306,直接编译下载示例程序会显示异常,如图(图中红线VCC连接的是开发板3.3V):
修改为对应的SSD1306驱动方式,编译下载后显示正常,如图:
基于运行成功的示例程序,用户还可以结合自己需求,设置不同字体大小、显示不同内容等,方便日后调用和二次开发。有关OLED显示原理及参数设置细节,请参阅网上其它资源。
第三部分:测评总结
1. 使用感受目前Arduino用户非常广泛,也吸引了众多单片机支持Arduino IDE开发。个人认为这种“简单、易上手”的嵌入式开发理念也同时推动了技术进步。W800_arduino V4.0开发板兼容Arduino IDE和UNO引脚布局,对于使用Arduino IDE的用户十分友好。板子性能强大,带有无线功能,板载一颗三色LED和一路按键,带有常用数字IO输入输出、PWM输出、高精度AD、IIC、UART等功能,能够满足基本的测试与开发需求。芯片主频高,性能强大,在控制领域、物联网领域有较好应用前景。板载USB转串口、USB-C支持、三色灯、按键、UNO板引脚分布等设计方便了用户使用,为开发板增色不少。
专业人士开发使用该单片机时,建议到官方网站下载专用的开发软件(参考文献【9-10】)。技术人员指出,联盛德官方现在推出的是 SDK W80X_SDK_v2.x 是全新驱动和架构,较v1.0 有很多改善,并在不断丰富更多组件和场景示例。只是对Arduino IDE 暂时还未做支持。github上的W80x Arduino SDK 是 社区爱好者 基于以前官方的w80X_SDK_v1.0.0的SDK版本 适配而成。 当时有适配部分wifi连线功能,但没有适配蓝牙。WIFI相关patch 或可参考http://ask.winnermicro.com/article/187.html作为非专业人士,平时只是在用Arduino开发板(如UNO、mega2560)实现简单的控制功能。在试用中一直在思考这块W800_arduino V4.0开发板的功能定位。与UNO板相比,确实有性能上的碾压(比如主频、AD精度),使用也同样方便。理论上UNO板的适用场景,这块W800_arduino板也能出色胜任。但UNO板的更大价值在于arduino世界的入门引导,因此其易用性及人性话设计值得学习。由此评价W800_arduino V4.0开发板,建议进行进一步改进和优化,以进一步提升吸引力,为W80x系列物联网开发芯片的推广应用打下基础。
2. 意见与建议在测试的这几天时间里,整体使用顺利,感觉良好。具体对比开发板和指导文档以及使用Arduino IDE进行编程测试过程中,发现一些可供进一步优化的细节,以下非专业建议仅供参考:
(1)丝印VIN的设计不够合理
建议修改为“ADC”。由于开发板外观及引脚分布部分借鉴了UNO板布局设计,不可避免地要受UNO开发板和配套扩展板的使用习惯影响。UNO板上VIN为7~12V直流供电输入端,W800_arduino V4.0这里VIN是指AD转换的电压输入引脚。若误接7~12V电压,可能导致开发板损坏。市面上有不少UNO扩展板是VIN供电设计。
(2)开发文档(使用指导)不够详细
目前测试能够找到的资料一是网上他人已经成功添加了开发板的教程,二是开发文档。对于开发文档,整体阅读下来感觉还有很多需要优化的地方。比如,多数图片模糊,阅读体验欠佳;各种基础功能需要有经验的Arduino开发者通过示例去尝试。如果是对标UNO开发板,虽然性能上超过了UNO,但相关的生态系统和技术支持也必须丰富和完善才能有利于推广使用。
(3)网上资料较少
看到社区最新的帖子是6月份的,建议针对W800_arduino这样的开发板推出一系列基础使用教程,通过文档、视频等形式,让入门变得容易。
(4)开发板资源建议进一步增加
如AD功能引脚,板上仅有PA1和PA4两路,且为IIC复用。建议增加AD引脚数量。(5)开发板PCB布局不够协调和美观
贴片电阻电容等相近元器件封装不统一,整体观感欠佳。与0201小贴片相比,拨码开关、三色LED灯、电解电容堪称巨物。观察可知,开发板的PCB空间似乎十分富裕。当然,开发板的布局也可能是向无线功能妥协后的结果。总之,建议尽量统一同类元件封装规格,在布局时使整体更加协调。如:把三色LED更换为小型贴片封装,三位拨码开关甚至可以更换为3*2杜邦排针。
由于本人水平和测试时间有限,以上测评仅代表个人观点。在试用中,对诸多疑问也并未深究,文中也一定有疏漏和错误,敬请批评指正。最后,希望看到W800_arduino家族开发板能出现更多对Arduino IDE的支持,形成ESP32等类似的强大Arduino生态家族。
参考文献:
[1]【联盛德 W800 Arduino开发板】Arduino IDE 开发环境搭建、程序测试_评测-面包板社区
[2]【联盛德 W800 Arduino开发板】超详细用Arduino IDE开荒教程,附点灯、温度计项目_评测-面包板社区
[3] W80X Arduino 环境搭建 - 联盛德问答社区
[4] W80X|联盛德|nulllab空想实验室|Arduino适配|学习(6):w80x_arduino环境安装 - 知乎
[5] zhdocs/zhW_Series/W800/Docs/SDK_Develop/start/Start.md at master · SmartArduino/zhdocs · GitHub
[6] GitHub - board707/w80x_arduino: w806 package for Arduino IDE
[7] extension://bfdogplmndidlpjfhoijckpakkdjkkil/pdf/viewer.html?file=https%3A%2F%2Fwww.winnermicro.com%2Fupload%2F1%2Feditor%2F1715418237771.pdf
[8] extension://bfdogplmndidlpjfhoijckpakkdjkkil/pdf/viewer.html?file=https%3A%2F%2Fwww.winnermicro.com%2Fupload%2F1%2Feditor%2F1614934550940.pdf
[9] extension://bfdogplmndidlpjfhoijckpakkdjkkil/pdf/viewer.html?file=https%3A%2F%2Fwww.winnermicro.com%2Fupload%2F1%2Feditor%2F1621128523355.pdf
[10] WinnerMicro 联盛德微电子