发新帖本帖赏金 1.00元(功能说明)我要提问
12下一页
返回列表
[单片机资料]

瑞昱双频WiFi+BLE5.0物联网单片机之MicroPython教程

[复制链接]
8127|26
手机看帖
扫描二维码
随时随地手机跟帖
Simon西|  楼主 | 2021-3-31 19:07 | 显示全部楼层 |阅读模式
本帖最后由 Simon西 于 2021-3-31 19:18 编辑

瑞昱(Realtek)推出了一款支持2.4G/5G Hz的双频WiFi + BLE 5.0的物联网单片机,叫Ameba RTL8722DM。 这个开发板使用ARM Cortex-M33构架,有大小双核,大核运行程序,小核可以帮助省电。此外还有超大的内存:512KB SRAM + 4MB PSRAM,可以处理应付绝大多数物联网场景。 这个单片机的主要配置如下,

3107460645766ae874.png

CPU
32-bit Arm®Cortex®-M4, up to 200MHz
32-bit Arm®Cortex®-M0, up to 20MHz

MEMORY
512KB SRAM + 4MB PSRAM

KEY FEATURES
Integrated 802.11a/n Wi-Fi SoC
Trustzone-M Security
Hardware SSL Engine
Root Trust Secure Boot
USB Host/Device
SD Host
BLE5.0
Codec
LCDC
Key Matrix

OTHER FEATURES
1 PCM interface
4 UART interface
1 I2S Interface
2 I2C interface
7 ADC
17 PWM
Max 54 GPIO

除此之外,这个开发板还支持标准C语言SDK, Arduino还有MicroPython(皆已开源),因此这里我们会着重分享MicroPython在这个板子上的使用和应用


了解更多详情,可点击官网链接:https://www.amebaiot.com/cn/

如果对演示视频感兴趣,也可关注B站账号
https://space.bilibili.com/457777430

使用特权

评论回复

相关帖子

Simon西|  楼主 | 2021-3-31 19:13 | 显示全部楼层
本帖最后由 Simon西 于 2021-4-9 16:49 编辑

上手教程
get-start-1-1.jpg
get-start-2.png
get-start-3.png
get-start-4-2.png
get-start-5.png
micropython-started-1.png
get-start-15-1.png
micropython-started-2.png
micropython-started-3.png
micropython-started-4.png

使用特权

评论回复
Simon西|  楼主 | 2021-3-31 19:20 | 显示全部楼层
本帖最后由 Simon西 于 2021-3-31 19:22 编辑

RTL8722 MicroPython 移植简介
基本背景

根据定义,MicroPython是专门为微控制器设计的精简高效的Python3编译器。

MicroPython 透过内建功能-REPL与Microcontroller进行即时交互的方法,将其与其他基于编译的平台(Arduino等)区分开来。

REPL代表Read-Evaluation-Print-Loop,它是一个交互式提示,可用于存取和控制微控制器。REPL具有其他强大的特色,例如tab处理,行编辑,自动缩排,输入历史记录等。它的基本功能类似于标准的Python IDLE,但是运行在微控制器上。要使用REPL,只需在PC上打开任何串行终端软件(最常用的工具是teraterm,putty等),然后连接到微控制器的串行端口,然后将baudrate设置为115200,然后手动重置开发板,即可看到>>> MicroPython提示符出现在终端画面上。您就可以在REPL上输入任何Python脚本。

建议多尝试使用 “help()” 函数以获得更多资讯。例如,微控制器上电并显示REPL后,只需键入help(),您将看到一个帮助页面,为您提供有关此移植的更多详细信息。如果您输入help(modules),它将列出所有可用的内建模块供您使用。

此外,如果您想了解有关模块的更多资讯,例如可用的API和CONSTANT,只需键入以下代码help(您感兴趣的模块)来获取该模块的详细信息。

让我们以Pin模块(GPIO)为例:
>>> help(Pin)
object <class 'Pin'> is of type type
  id --  
  init --  
  value --
  off --  
  on --  
  toggle --
  board -- <class 'board'>
  IN -- 0
  OUT -- 1
  PULL_NONE -- 0
  PULL_UP -- 1
  PULL_DOWN -- 2



REPL Hotkeys
• Ctrl + d :
MicroPython将执行软件重启,这在您的微控制器表现异常时非常有用。并且将再次执行 “boot.py” 中的脚本。请注意,这只会重置MicroPython interpreter 而不重置硬件,所有先前配置的硬件将保持原样,直到您手动重置开发板为止。
• Ctrl + e :
Paste mode 可以一次将一大部分的代码粘贴到REPL中,而无需一行一行地执行代码。适合当您找到MicroPython库并希望通过复制和贴上立即对其进行测试时。
• Ctrl + b :
此热键会将REPL设置回Normal mode。当你卡在某些模式下,可以利用这个解决。
• Ctrl + c :
此热键可帮助您快速取消任何输入并另起一行

使用特权

评论回复
Simon西|  楼主 | 2021-3-31 19:23 | 显示全部楼层
如果对自己编译固件有信心的话,可以尝试自己配置环境来自由编译MicroPython的固件

设置开发环境
步骤1: 安装驱动程序
首先,通过Micro USB将AmebaD连接到电脑:
get-start-4-2.png
如果这是您第一次将AmebaD连接到您的电脑,那么AmebaD的USB驱动程序将自动安装。
你可以在你的电脑的装置管理员中检查COM端口号:
get-start-5.png
步骤2: 安装相关工具
Windows环境:
对于Windows用户,请安装串行终端软件。最常见的串行终端是Tera Term和Putty,在这里我们建议使用Tera Term,可以从网路下载。
对于希望从头开始编译MicroPython的用户,请确保安装Cygwin,这是在Windows系统上运行的类似Linux的环境。选择Cygwin安装程序时,我们建议使用Cygwin 32位元版本。在Cygwin安装期间,安装程序将提示用户是否安装其他软件,请确保从“Devel”类别中选择make的GNU版本(请参见下图),然后选择最新版本。
micropython-started-1.png
另外,在固件编译过程中需要Python3,因此请确保从其官方网站下载最新的Python3,并在安装过程中要求时将其添加为环境变量。
Linux环境:
对于Linux用户,请使用apt-get install命令安装您选择的串行终端软件。在这里,我们建议使用picocom。
对于有兴趣在C语言中开发MicroPython模块的用户,请确保安装了至少3.82或更高版本的GNU make软件以及Python3。

使用特权

评论回复
Simon西|  楼主 | 2021-3-31 19:26 | 显示全部楼层
Ameba的MicroPython SDK里面也提供了已经编译好的最新固件供大家使用,上传固件的步骤如下,

将固件上传到Ameba
步骤1: 找到“Release”文件夹
下载MicroPython的开源SDK
https://github.com/ambiot/ambd_micropython

Github下载MicroPython repository 后,会在根目录中看到一个“Release”文件夹,并且在该路径下找到一个名为“Double-Click-Me-to-Upload”的工具。
步骤2: 进入UART下载模式
请先按住UART_DOWNLOAD按钮,然后按RESET按钮。如果成功,您应该在ameba上看到绿色的LED闪烁。
get-start-15-1.png
步骤3: 运行 “Double-Click-Me-to-Upload”
顾名思义,双击该文件以运行它,然后按照屏幕上显示的说明更新ameba的串行COM端口,这样上传就可以成功进行。上传成功后,您将在屏幕上看到一行日志–“All images are sent successfully”。

使用特权

评论回复
Simon西|  楼主 | 2021-3-31 19:27 | 显示全部楼层
本帖最后由 Simon西 于 2021-4-7 18:41 编辑

尝试第一个范例
步骤1: 打开 REPL
REPL代表读取,评估,打印和循环,它是MicroPython的终端,供用户控制微控制器。 REPL在LOG UART上运行,因此我们需要打开串行终端软件,在本例中为Tera Term,用以查看REPL。
micropython-started-2.png
打开Tera Term后,如上图所示选择“Serial”,然后使用下拉列表选择ameba的串行端口,然后单击“OK”。如果您的串行终端未配置为115200 baudrate,建议将115200设定为默认设置。
现在已经连接了串行端口,在ameba上按一下RESET按钮,如下所示会看到MicroPython的欢迎页面。
micropython-started-3.png
过程为Ameba首先检查其校准数据,然后启动MicroPython的固件,接着再运行“boot.py”python脚本和导入的内建python库。
现在试着输入help()查看更多信息,然后输入help(modules)检查所有现成可用的python库。
步骤2: 执行WiFi扫描范例
由于大多数外围设备的范例都需要额外的硬件才能显示该范例是否正常运行,因此我们将仅以WiFi扫描范例为例,来了解使用MicroPython控制WiFi是十分容易的。
现在,请复制并贴上以下代码,或手动将其输入Tera Term,然后按“Enter”。

from wireless import WLAN
wifi = WLAN(mode = WLAN.STA)
wifi.scan()



您应该能够看到返回周围无线网络的结果,这样就算成功了!
micropython-started-4.png

使用特权

评论回复

打赏榜单

巧克力娃娃 打赏了 1.00 元 2021-04-01
理由:感谢分享

henangongda123| | 2021-4-1 10:16 | 显示全部楼层
wifi这东西硬件难度不大,麻烦的是软件,服务器、通信协议、APP终端等等,涂鸦好像用的就是这个牌子的芯片

使用特权

评论回复
ILike123123| | 2021-4-1 10:24 | 显示全部楼层
主要看价格吧

使用特权

评论回复
Simon西|  楼主 | 2021-4-7 18:44 | 显示全部楼层

ADC - 读取模拟信号

材料准备
  • Ameba x 1, 电位器x 1
范例说明
这里我们把ameba连接到一个电位器上来读取它的数值,连接方式如下
1.jpg
复制粘贴以下代码到REPL上
import socket
a = ADC(0)
a.read()

其实真正要用的只有一行,是不是超级简单? 随用随敲入代码,非常方便!

使用特权

评论回复
lcfmax| | 2021-4-8 08:39 | 显示全部楼层
规格蛮高档的,不是一般人能玩的。还是ESP32比较接地气点

使用特权

评论回复
Simon西|  楼主 | 2021-4-9 16:47 | 显示全部楼层
lcfmax 发表于 2021-4-8 08:39
规格蛮高档的,不是一般人能玩的。还是ESP32比较接地气点

哈哈 说的没错,不同场景 不同使用吧

使用特权

评论回复
Simon西|  楼主 | 2021-4-9 16:49 | 显示全部楼层

如果价格是个问题,可以参考淘宝上的BW16(RTL8720DN),是一个外设缩水、性能满血的版本

使用特权

评论回复
Simon西|  楼主 | 2021-4-9 17:07 | 显示全部楼层
GPIO - 3种方式点亮LED

材料准备
  • Ameba x 1, LED x 1, 电阻(220欧姆) x 1
范例说明
闪烁LED是开始了解并使用MicroPython最好示例。
首先,如下图所示将PB_22引脚连接到与限流电阻串联的LED的阳极引脚,再将GND连接到LED的阴极引脚:
1.png
然后,复制以下代码并在REPL界面中按Ctrl + E进入REPL的粘贴模式(有关REPL和粘贴模式的更多信息,请查看上手教程)。如果使用Tera Term,只需右键单击终端的任何空白处即可将代码粘贴到REPL,然后按Ctrl + D执行代码。如果一切正常,就可以看到LED在3秒钟内闪烁3次。
from machine import Pin
a = Pin("PB_22", Pin.OUT)
a.value(1)
time.sleep_ms(500)
a.value(0)
time.sleep_ms(500)
a.on()
time.sleep_ms(500)
a.off()
time.sleep_ms(500)
a.toggle()
time.sleep_ms(500)
a.toggle()

终于不用DigitalWrite(1), 和DigitalWrite(0)...  

使用特权

评论回复
Simon西|  楼主 | 2021-4-12 19:39 | 显示全部楼层

I2C - 发送与接收
MicroPython玩I2C也是相当的方便!


材料准备
  • Ameba x 1, Arduino UNO x 1
范例说明
I2C是一个微控制器上非常常见的模块,它只需要两根线就可以实现最大3.4Mbps的传输速度。它使用主从模式,一个主机可以同时连接最多128个从机,因此经常用在微控制器与感应器之间的数据传输。这里我们使用ameba作为主机来连接从机Arduino UNO,来验证I2C的发送和接受。

在连接之前,请先将以下代码上传到Arduino UNO中,“Examples -> Wire -> Slave_receiver”
接下来,请按以下所示来连接,此处我们选择PA_26 作为 SDA引脚,PA_25 作为 SCL.
注意: 目前仅支持一组I2C在MicroPython上使用,引脚如下










Unit
SDA
SCL

0

PA_26

PA_25









1.png
请一行接一行地复制粘贴以下代码到REPL上,来观察代码效果。
from machine import Pin, I2C
i2c = I2C(scl = "PA_25", sda = "PA_26", freq=100000) # configure I2C with pins and freq. of 100KHz
i2c.scan()
i2c.writeto(8, 123) # send 1 byte to slave with address 8
i2c.readfrom(8, 6) # receive 6 bytes from slave

之前有小伙伴讨论说如果用C封装好的话,也是可以达到Python的精简程度,这点上我非常同意,没有一个语言比另一个完全更好的,但是MicroPython有意思,也是不同于C程序的是,你可以一边输入代码,一边观察单片机的表现,而不用编译->上传之后才能看得到,这点上MicroPython真很方便。























使用特权

评论回复
Simon西|  楼主 | 2021-4-14 19:02 | 显示全部楼层
PWM - 让LED渐明渐暗
PWM和GPIO一样都是很常用的外设,可以控制LED明暗之外,还能控制直流马达移动,算是一个非常实用的外设,那么就一起来看看PWM在MicroPython上的表现吧


材料准备
  • Ameba x 1, LED x 1, 电阻(220欧姆) x 1
范例说明
PWM脉宽调变控制输出脉波周期来实现对LED亮度和马达的控制。下面是我们用LED来展示PWM是如何来实做的。
连接PA_26至LED的正极和电阻串联在一起, 然后GND接至LED负极。如图
1.jpg
然后, 逐行复制下面的代码去REPL并观察结果, LED会慢慢的渐变明亮。
from machine import Pin, PWM
import time
p = PWM(pin = "PA_26")
# 0 duty cycle thus output 0
p.write(0.0)
# 10% duty cycle
p.write(0.1)
# 50% duty cycle
p.write(0.5)
# 100% duty cycle
p.write(1.0)

MicroPython的特性除了既写既现之外,还能帮助我们很好的学习和观察外设以及其他部件的运作模式,是它的一大特色和优势



使用特权

评论回复
Simon西|  楼主 | 2021-4-16 22:05 | 显示全部楼层
RTC - 时间显示RTC (Real Time Clock) 可以帮助用户快速查询时间,对于时间敏感的应用是很有必要的


准备材料
  • Ameba x 1
范例说明
RTC 模组会帮助微控制器来追踪时间,是时间模组必须的一部分。我们在这里有一个示例,来展示如何来得到本地时间和上传时间。
复制下面的代码贴至REPL,观察结果。

rtc = RTC()
rtc.datetime() # get date and time
rtc.datetime((2020, 12, 31, 4, 23, 58, 59, 0)) # set a specific date and time (year, month, day, weekday(0 for Monday), hour, minute, second, total seconds)
rtc.datetime() # check the updated date and time

[size=1em]




使用特权

评论回复
Simon西|  楼主 | 2021-4-19 19:01 | 显示全部楼层

SPI - 作为从设备接收消息


SPI作为单片机上常见的高速通讯协议之一,也是非常必要的,下面就用一个Arduino UNO来和使用MicroPython的瑞昱RTL8722DM 物联网单片机使用SPI来一个“深入交流”

材料准备
  • Ameba x 1, Arduino UNO x 1
范例说明
SPI是一种快速且强大的通讯协议,并通常在微处理器中被用来接受传感器的数据或输出图像讯号。在这个示例中将示范ameba如何透过MicroPython以从属模式接收数据。
在通讯连接建立之前,需要先将以下代码烧录到Arduino UNO。
rtc = RTC()
///////////////////////
// SPI Master Write //
///////////////////////

#include

void setup (void) {
   Serial.begin(115200); //set baud rate to 115200 for usart
   digitalWrite(SS, HIGH); // disable Slave Select
   SPI.begin ();
}

void loop (void) {
   char c;
   digitalWrite(SS, LOW); // enable Slave Select
   // send test string
   for (const char * p = "Hello, world!\r" ; c = *p; p++) {
      SPI.transfer(c);
      Serial.print(c);
   }
   Serial.println();
   digitalWrite(SS, HIGH); // disable Slave Select
   delay(2000);
}

Arduino UNO将以如下图所示的连接方式和Ameba连接,我们使用第“0”组SPI作为从机, 并将Arduino UNO当作SPI的主机。
1.jpg
然后复制以下代码并粘贴到REPL的粘贴模式窗口,并等待代码生效。

from machine import SPI
s1= SPI(0 , mode = SPI.SLAVE)
for i in range(14):
chr(s1.read())



使用特权

评论回复
Simon西|  楼主 | 2021-4-21 19:12 | 显示全部楼层

Time - 延迟和计时

时间控制是所有单片机应用的核心,MicroPython上也不例外,接下来我们一起来看看Time模块在RTL8722DM上的表现和使用吧~

材料准备
  • Ameba x 1
范例说明
MicroPython 提供了很多函数来处理延迟和计时,以下是一些示例。
复制下面的代码至REP来观察结果。
import time
time.sleep(1) # sleep for 1 second
time.sleep_ms(500) # sleep for 500 milliseconds
time.sleep_us(10) # sleep for 10 microseconds
start = time.ticks_ms() # get millisecond counter


使用特权

评论回复
Simon西|  楼主 | 2021-4-23 18:52 | 显示全部楼层

Timer -周期性定时器


Timer的用处非常广泛,从安排周期性任务到PWM运行,甚至RTOS都是基于Timer的运用,在RTL8722DM上面用MicroPython来控制Timer也是很简单的,一下来看一下示例吧,

材料准备
  • Ameba x 1
范例说明
这里有3个定时器可以使用, 全部是32kHz, 分别是定时器1/2/3。
我们使用定时器1来示范一个周期性定时器是怎样工作的。
复制下面最初的3行代码至REPL来查看结果。
from machine import Timer
t = Timer(1) # Use Timer 1/2/3 only
t.start(2000000, t.PERIODICAL) # Set GTimer fired periodically at duration of 2 seconds, printing text on the terminal

# To stop the periodical timer, type
t.stop()

信息“–timer triggered. to stop: type t.stop()–” 每2秒会被打印在端口。如需停止定时器, 输入 t.stop()。

使用特权

评论回复
Simon西|  楼主 | 2021-4-26 11:49 | 显示全部楼层
UART - 发送和接收


串口的重要性不必多言,从调试日志到下载固件,硬件沟通,样样精通,所以RTL8722上的UART模块也做的小巧轻快,方便大家轻松上手!
材料准备
  • Ameba x 1, USB转TTL串行模块 x 1
范例说明
UART是一种非常通用的通信协议,是微控制器的一个重要组成部分。 USB转TTL串行传输模块是一种可以将UART信号转换为USB信号的集成电路,以便我们可以在PC上看到UART日志。该模块经常用于包括Ameba在内的许多开发板上。但是,该模块在Ameba上的功能被保留用于LOG UART和固件上传,所以我们需要其他独立模块在Ameba和PC之间进行通信。
当前有2组UART引脚供MicroPython用户使用,它们分别是









Unit
TX
RX
0

PA_21

PA_22

3

PA_26

PA_25









在此示例中,我们使用第“0”组UART引脚来示范UART在Ameba上的工作方式。
如下图所示,将USB转TTL串行传输模块连接到引脚PA_21和PA_22
1.jpg 然后,将以下代码逐行复制并粘贴到REPL中,以查看其效果。

from machine import UART
uart = UART(tx="PA_21", rx= "PA_22")
uart.init()
uart.write('hello')
uart.read(5) # read up to 5 bytes











使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

62

帖子

0

粉丝