当前位置:首页 > Adafruit
  • PIL与OLED的组合--Adafruit 128x64 OLED for Raspberry上手

    PIL与OLED的组合--Adafruit 128x64 OLED for Raspberry上手

    Python Imaging Library (PIL)是python下的图像处理模块,支持多种格式,并提供强大的图形与图像处理功能。OLED显示屏是利用有机电自发光二极管制成的显示屏。由于同时具备自发光有机电激发光二极管,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。 嵌入式应用中,很多情况下,我们只需要显示一些简单的信息,此时OLED应是比较好的选择。例如在树莓派中,大多数情况下是直接与显示器连接,然后配置键盘、鼠标,这样确实很方便,不过这样太占空间。依笔者的经验,在使用树莓派的过程中,大部分情况下都是使用的HEADLESS模式,即无显示器及键盘、鼠标的工作方式。不过话虽如此,给树莓派添加一个小小的OLED屏,用来显示一些诸如IP地址,系统负载等信息,一直是笔者的一个强烈愿望!最近,入手一块来自Adafruit的小OLED屏,些屏专为树莓派定制,好好体验了一把HEADLESS的显示输出功能,其中也不乏惊喜!惊喜就是附带还体验了一把PIL的图像处理操作。 先看硬件。 此模块专为RPI设计,引脚与RPI产品全面兼容,在尺寸上则刚好与RPI ZERO W吻合。模块上OLED显示屏位于中央,两侧还有一些额外的空间,增加了一个5向操纵杆和两个按钮,可以用于实现用户交互,比如设计一个简单的手柄小游戏? OLED控制器为SSD1306,通过FPC软排线与RPI的40Pin引脚相连,从背面的引线可以清楚看到连接情况,这些信号引脚除了SSD1306的I2C接口外,还包括了按钮及五向摇杆的GPIO引脚。 关于硬件信号及连接,请参考下图 其中RPI的GPIO4/17/22/23/27分别连接到五向摇杆,GPIO5/6连接到两个按键,SCL及SDA则是SSD1306的I2C接口。简单的设计,带来不一般的体验,当然前提条件是你得先有一个RPI。段子手网友已开始调侃:很好的设计,就只差一个RPI! 这是OLED模块与RPI 0 W的连接图,看上去挺和谐。 接下来准备RPI,主要步骤包括启用I2C接口,安装软件及相关的支持库。 树莓派的硬件如I2C/SPI等接口,默认是不开启的,所以先使用raspi-config命令来启用I2C接口,如下 启用了I2C接口后,可以使用i2cdetect命令来检测I2C设备,该命令执行结果如下 很好,我们已检测到了0x3c地址处的设备,接下开始安装软件库及官方提供的DEMO。 官方的DEMO使用了RPi.GPIO库,所以先要安装该库 sudo apt-get update sudo apt-get install build-essential python-dev python-pip sudo pip install RPi.GPIO DEMO使用了Python Imaging Library来进行绘图,另外还使用了smbus来进行通信,所以接下来安装这两个库 sudo apt-get install python-imaging python-smbus 这些库都安装完成之后,接下来将官方DEMO从GIT上拖下来 sudo apt-get install git git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git cd Adafruit_Python_SSD1306 sudo python setup.py install 先不管代码,运行个DEMO来看效果,然后再来研究细节。 打开examples目录,找到buttons.py程序,运行,看到OLED屏上的内容如下 buttons.py程序绘制一个五向摇杆图案及两个按钮图案,当用户按下按钮时,会在OLED上绘制出用户的控制效果,图中显示的是按下五向摇杆的向上按钮的显示效果。 除了可以绘制简单的几何图形,也可以绘制图片内容,图中显示的是绘制一头小猫的效果。不过可惜的是,该OLED不支持彩色及灰度显示,所以显示的只是图片二值化后的结果,稍显粗糙! 看了效果,咱们一起来研究下程序,下面以一个汉字显示操为例,顺便研究下强大的PIL库。 程序代码如下 from PIL import Image, ImageDraw, ImageFont import Adafruit_SSD1306 RST = None DISP_ADDR = 0x3c disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) disp.begin() disp.clear() disp.display() size = disp.width, disp.height font = ImageFont.truetype('msyh.ttc', 12) image = Image.new('1', size) draw = ImageDraw.Draw(image) draw.text((0, 0), '古诗一首', font=font, fill=255) draw.text((0, 20), '白日依山尽, 黄河入海流', font=font, fill=255) draw.text((0, 38), '欲穷千里目, 更上一层楼', font=font, fill=255) disp.image(image)[!--empirenews.page--] disp.display() 传统的绘图方法,先写一个绘点的函数,然后不管是绘制字符,还是绘制几何图形及图像,都是调用这个绘点函数来实现,如果要实现更好的性能,也许会通过块操作(包括硬件DMA等),不过在这里,我们看不到任何与绘点相关的操作,我们看到的只是一幅图,没错,就是一幅图! 前面的初始化代码我们略过不提,其中语句 font = ImageFont.truetype('msyh.ttc', 12) 创建一个ImageFont对象,该对象指定了用来向Image中绘制字符所使用的字体,可以直接使用truetype字库,同时指明字体大小。 image = Image.new('1', size) draw = ImageDraw.Draw(image) draw.text((0, 0), '古诗一首', font=font, fill=255) draw.text((0, 20), '白日依山尽, 黄河入海流', font=font, fill=255) draw.text((0, 38), '欲穷千里目, 更上一层楼', font=font, fill=255) 这一部分代码先创建一幅图片,然后使用ImageDraw向上绘制指定的文字,使用指定的字体及填充色。 最后的两行代码将图像显示到OLED上,很简单,效果呢,也很简单。 不过调用起来确实非常舒服! 如果直接加载图像文件并显示,则步骤更简单,如下是显示非常有名的lena图像的代码 from PIL import Image, ImageDraw, ImageFont import Adafruit_SSD1306 RST = None DISP_ADDR = 0x3c disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) disp.begin() disp.clear() disp.display() image = Image.open('lena.png').convert('1') disp.image(image) disp.display() 代码就不分析了,调试效果如下,后面一张图是原图 差别有点大,主要原因是图片二值化后细节丢失太多,再加上缩放后细节也会丢失! 总体说来,Adafruit 128x64 OLED for Raspberry不错!一方面,我们终于可以扔掉显示器了(P:-)),其次,可以使用这个模块来学习简单的计算图形学(绘图,例如直线生成算法,曲线的生成算法等),细节都隐藏在PIL中;还有,再也不用担心找不到设备的IP地址了,如下 当然,要是价格再便宜一点就更好了!

    时间:2018-10-25 关键词: 树莓派 adafruit raspberry 拓展版 OLED pil 128x64

  • ATSAMD51的特快专递--Adafruit Metro M4开发板评测

    ATSAMD51的特快专递--Adafruit Metro M4开发板评测

    准备好了么,来自ATSAMD51的特快专递已准备就绪,就等你来! Adafruit Metro系列又双叒叕出新品了,这是迄今为止最为强大,速度最快的Metro产品,搭载来自Microchip的ATSAMD51产品,120MHz的最高主频、浮点运算支持,以及SPI/UART/I2C硬件支持,外观还是Arduino的形态。 借Arduino的外形成名并非Adafruit的独家之秘!许多厂商感慨于Arduino的受欢迎程序,不得不蹭一把Arduino的热度!以Arduino之名,推介各自的硬件产品,确实吸引了更多的目光! Metro M4 Express开发板的设计也有可圈可点之处! 首先是MCU,使用的的是来自Microchip的ATSAMD51,这是一款基于Cortex-M4的产品,最高工作主频为120MHz,其它一些特性列表如下 • Cortex-M4内核,最高主频120MHz • 硬件DSP及浮点运算支持 • 512/192KB的Flash/RAM组合存储 • 32位运算及3.3V工作电压 • DUAL 1MSPS DAC接口(A0, A1) • DUAL 1MSPS ADC接口(8个模拟pin) • 6个串行接口(I2C/SPI/UART) • 16个PWM输出 • 立体声I2S输入/输出接口 • 10位并行捕获控制器 • 使用64 QFN封装 供电接口设计,板载DC接口,可以使用7~9V的外部DC电源对其供电,该接口有独立的开关来进行控制。Micro USB即可以充当供电接口,也可以做为串口来使用。开发板提供了25个GPIO,其中8个用于模拟输入,其中两个可以用于真正的模拟输出,其它一些接口复用于SPI/I2C/UART等设备,工作电平均为3.3V。 原生的USB支持,不需要USB-TTL设备来进行转换,该接口用于串口通信时,可直接与PC连接,以进行数据交换;该接口还可以用做HID来连接键盘及鼠标。 开发板的其它一些特性还包括板载的LED灯、NEOPIXEL,2MB的QSPI FLASH存储器,在Circuit Python中可以用来存储脚本、库及其它一些文件;另外UF2 bootloader技术使得对开发板烧写程序变得更容易!对了,开发板还提供了一个JTAG调试接口,可以对其进行代码调试,这可是Arduino没有的功能! 另外值得一提的是,该板目前的状态还是BETA状态,按官方的说法,这是该MCU的第一款产品,目前就是让用户体验一种新奇、冒险、甚至是宕机的快感! Adafruit的SAMD21及SAMD51开发板均支持UF2 bootloader技术,该技术将内部FLASH存储器映射成一个PC存储器,在烧写程序代码时,只要将二进制代码文件直接拖到该磁盘,就完成了烧写过程,极大的简化了烧写步骤。如果要进入UF2 bootloader模式,快速双击reset键,NEOPXEL变成绿色,同是PC端会出现一个METROM4BOOT存储设备,表示开发板已进入了UF2 bootloader模式。 Metro M4支持Arduino开发,先安装必要的硬件支持,安装好了之后,选择Metro M4 Express开发板 安装好硬件支持之后,需要选择Metro M4 Express开发板作为目标板 然后就像一般的Arduino开发板一样进行开发,点个灯,加个传感器之类,这里就不介绍了。 重点是CircuitPython。 CircuitPython是一种编程语言,主要用于在低成本微控制器板上进行编程实验和学习。它使得入门比以往任何时候都更容易,无需前期桌面下载。设置好电路板后,打开任何文本编辑器,开始编辑代码。就这么简单。讲白了,所谓的CircuitPython就是Python的MCU版本,简单、易用。 在使用CircuitPython之前,需要做好准备工作。第一件事就是将Metro M4 Express变成一个Python解释器,按照前面介绍的方法,将CircuitPython固件通过UF2写入到开发板,重新上电后METRO就变成了一个Python解释器了。 接下来的工作是编程程序代码,可以使用普通的文本编程器来编写Python代码,当然最好的方法还是使用专用的编辑器来编写代码,专用的代码编辑器如Mu,带来了语法高亮、代码格式化及代码提示等附加功能,能极大的提升代码编辑效率。 Mu编辑器除了能编辑代码之外,还提供了两个实用工具,一个是Serial,另一个是Plotter,前者可以代替putty等来实现与开发板的交互,后者则提供了一个实用的绘图工具,类似Arduino的Serial Plotter。 CircuitPython在板上查找要运行的代码文件。有四个选项:code.txt,code.py,main.txt和main.py。CircuitPython按顺序查找这些文件,然后运行它找到的第一个文件。虽然我们建议使用code.py作为您的代码文件,但重要的是要知道其他选项存在。如果您的程序在运行时没有得到预期的效果,请确保是否另一个文件正在运行。[!--empirenews.page--] 最后还要提一下库文件的问题。Python之所以强大,是因为有大量三方的库供我们调用,Adafruit也为Circuit提供了大量的库支持,在使用一些外设时,不需要自己去再造一个轮子,直接引用这些库就可以完成任务,这当然是一件妙事! 从官方下载库文件解压后会得到一个lib文件夹,将该文件夹复制到CURCUITPY所在的磁盘根目录下,就可以使用这些三方库来增强程序功能。 现在开始,可以愉快的使用Metro M4 Express来体验CIRCUITPYTHON了。 点灯我们就不点了,但是看下代码,熟悉下编程风格还是有必要的,如下 import board import digitalio import time led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT while True: led.value = 0 time.sleep(.5) led.value = 1 time.sleep(.5) 如果不熟悉这些函数,可以按照Arduino代码的风格来猜,基本上是一致的。 要熟悉相关的代码及库,可以借助Python自身的帮助功能,举例如下,假设我不知道board模块里有哪些功能,在Serial窗口里执行如下的代码 >>> import board >>> dir(board) ['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'D0', 'RX', 'D1', 'TX', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'SDA', 'SCL', 'NEOPIXEL', 'SCK', 'MOSI', 'MISO', 'LED_RX', 'LED_TX', 'I2C', 'SPI', 'UART'] >>> 其中>>>正是Python交互的提示符,我们可以看到board模块基本只提供了一些开发板的接口定义,我们在上述源代码中使用的board.D13就是开发板的13号pin。 在lib目录下有个simpleio.mpy,这是一个简单IO封装库,如果想获取其帮助,参考如下代码 >>> import simpleio >>> dir(simpleio) ['tone', 'DigitalOut', 'time', 'shift_out', 'bitWrite', 'array', '__name__', 'DigitalIn', 'digitalio', 'shift_in', 'map_range', 'pulseio', 'audioio', 'Servo'] >>> 另外也可以使用help()来获取更详细的帮助,如下 >>> help(simpleio) object is of type module tone -- DigitalOut -- time -- shift_out -- bitWrite -- array -- __name__ -- simpleio DigitalIn -- digitalio -- shift_in -- map_range -- pulseio -- audioio -- Servo -- >>> 这样看是不是更清晰了! 差不多了,该写个完整的脚本来体验Python的便利了。这次使用的是DHT11温湿度传感器,在一些精度要求不同的场合,DHT11还是很不错的,如果对精度要求高,可以使用DHT22,这些设备都有一个优势,只使用一根信号线,连接非常简单。将DHT11的信号线连接至D2,然后开始写程序,代码如下 import board import adafruit_dht as dht import time dht11 = dht.DHT11(board.D2) while True: temp, humi = dht11.temperature, dht11.humidity print('temperature: {}\nhumidity: {}%'.format(temp, humi)) time.sleep(5) 保存为code.py,让它自动运行,在Mu中打开串口,得到如下的结果 从未如此简单,是不是? 只可惜Metro M4 Express开发板没有网络连接能力,否则就可以将检测到的数据发布到Internet上了! 总结来说,Metro M4 Express开发板还是值得一试的。以前总有人担心,在MCU上使用Python,性能是否会有瓶颈,但是在120MHz的频率之下,简单的应用场合下,使用起来还是很流畅的! 在AI呼声越来越高的今天,了解一点Python,学一点Python,未尝不是一种好的选择,也许一觉醒来,AI已普及到了MCU上,谁能说得好呢? 

    时间:2018-09-28 关键词: Microchip MCU 开发板 adafruit m4 metro atsamd51

  • 让音乐播放更简单——Adafruit Music Maker FeatherWing和Audio FX Sound Board评测

    让音乐播放更简单——Adafruit Music Maker FeatherWing和Audio FX Sound Board评测

    本文介绍的两款模块都很小巧,但功能强大,一款是高集成度的OGG播放器方案,另一款是大家都熟悉MP3解码方案。 此次评测的是Adafruit的两块板子:Audio FX Sound Board & Music Maker FeatherWing w / Amp: Audio FX Sound Board 这是Audio FX Sound Board,主芯片是VSLI VS1000D,外围芯片是华邦的25Q128FV。有两排2.54排针接口,一个Micro USB接口,还有一个3.5mm耳机插座。背面还预留一个电源插座焊盘。 这是一个无需编程的可独立工作的小型音效触发器,定位与MP3音乐播放模块不同,比起一般的ISD芯片和可录音贺卡效果要好得多,大小22mmX48mmX6mm,重量4.7g,特别适用于道具、服装和玩具上。 供电是3V到5.5V直流,内建16MB存储,可插入电脑以U盘形式访问内部,支持OGG和WAV音频文件,支持44.1KHz,16bit(CD音质),11个触发输入,可触发播放对应的音频文件,立体声线路输出,可接耳塞或者有源音箱,五种触发效果(通过文件名设定)。 模块内置的固件设计了五种常用的触发效果,以方便在不同的应用场合下使用,分别是: 1. 基本触发:输入低电平时,触发一次播放; 2. 保持循环触发:当输入电平一直为低时,循环播放,松开即停; 3. 锁定循环触发:每按一次按键就开始重复播放,直到下一次按下按键; 4. 顺序播放:支持最多10段音频,第一次按键播放#0,第二次播放#1,如此类推,直到播放完#9后,又从#0开始; 5. 随机播放:与顺序播放类似,只是播放次序是随机的; 现在试试这些触发模式。首先准备一些音频文件,OGG格式或WAV。这几个文件需要与板子开关输入相对应,也就是一个IO可以触发一个文件或一系列文件的播放。总共有11个IO输入(板子一排从0到10编号)。每一个文件的触发播放的方式由它的文件名说明,触发方式和触发IO可以自由组合,例如: l T00.OGG,由IO0触发,基本触发方式; l T01HOLDL.OGG,由IO1触发,保持循环触发方式; l T02LATCH.OGG,由IO2触发,锁定循环触发方式; l T03NEXT0.OGG到T03NEXT9.OGG,由IO3触发,这10个文件按顺序播放; l T04RAND0.OGG到T04RAND9.OGG,由IO4触发,这10个文件随机播放; 我的测试硬件如下:绿色的是6个轻触开关(低电平有效);黄色的是移动电源,给模块供电;黑色的是一个有源音箱(用耳机也没有问题,驱动能力足够)。 这里稍感不便的是,U盘拷贝数据的速度只有19.8KBps。 假如按键触发方式还是不能满足实际需要,这个板子还提供了UART接口控制的进阶功能,可以实现更复杂的播放控制。有相应的Arduino Library可供使用: 值得注意主芯片VS1000D具有以下特性: OGG格式音频播放器SOC; 低功耗,带电源按键输入管脚,软件控制电源关断; 内建电压调整器,单电源输入; NAND FLASH接口; USB FS硬件接口; 内建高品质立体声DAC,集成耳放; 自带功能完整的播放器固件,也可以通过外部NAND FLASH或者SPI存储器修改或取代;因此,这个模块实际上是可以重新编程的,官网有这方面的的资料:http://www.vlsi.fi/fileadmin/app_notes/guide_vs1000.pdf,还有IDE免费下载:http://www.vlsi.fi/en/support/software/vside.html,这里不作详细说明。 多样的存储器接口,功能完整的固件,集成耳放和电源管理,USB免驱,低功耗,非常适合作为低成本的音乐播放器(还有USB大容量存储和USB音频设备)或者作为嵌入到其他物品上: Music Maker FeatherWing w / Amp 此Arduino模块虽小,但附带2.1W的D类功放(TI TPA2012D2),主芯片为VSLI VS1053,可以解码多种格式,比如MP3, AAC, Ogg Vorbis, WMA, MIDI, FLAC, WAV (PCM and ADPCM),并且支持高音、低音和音量的数字调节。 通过SPI接口,可以从SD卡中播放音频文件。特别的是,可以让芯片启动到MIDI模式,从UART 管脚读取31250波特的MIDI数据,以实现类似合成器和电子鼓的功能。[!--empirenews.page--] 用VS1053做MP3的例子非常多,而我这里选择另一方面的应用:MIDI模式。这个模块要使用MIDI模式,需要把PCB背面的跳线焊盘短路。模块需要两组电源5V和3V,分别供电给功放和VS1053。我这里从一个开发板上取电。功放输出外接两个无源小音箱(TB拆机件)。这里选择用电脑串口发送指令,USB转串口模块是必须的,强烈建议使用FT232,其他的像PL2303不一定正常。因为都是从USB取电,所以这里串口模块仅连接一根线。 这里参考了Adafruit的Arduino代码,用Python实现同样的功能,实现了这几个函数: 初始化函数(注意这里设置了两个通道,使用不同的乐器,在播放《献给爱丽丝》的时候使用两种乐器轮流演奏) def vs1053_midi_setup(com_name,timeout=0.5): ser=serial.Serial(com_name,31250,timeout=timeout)#31250 ser.open print(ser.name+' is opened!') midiSetChannelBank(ser,0, VS1053_BANK_MELODY) midiSetChannelVolume(ser,0, 127) instrument = VS1053_GM1_Acoustic_Grand_Piano #instrument = random.randint(1,128) midiSetInstrument(ser,0, instrument) print("Set Instrument1: %u"%instrument) instrument = VS1053_GM1_Acoustic_Guita midiSetInstrument(ser,1, instrument) print("Set Instrument2: %u"%instrument) print('Ready!') return ser 设置通道的乐器 def midiSetInstrument(ser, chan, inst): if chan>15: return -1 inst=inst-1 #page 32 has instruments starting with 1 not 0 :( if inst>127: return -1 ser.write([MIDI_CHAN_PROGRAM | chan]) time.sleep(1) ser.write([inst]) time.sleep(1) return 0[!--empirenews.page--] 设置通道音量 def midiSetChannelVolume(ser,chan,vol): if chan>15: return-1; if vol>127: return-1; ser.write([MIDI_CHAN_MSG | chan]) ser.write([MIDI_CHAN_VOLUME]) ser.write([vol]) return 0 设置通道 def midiSetChannelBank(ser,chan,bank): if chan>15: return -1 if bank>127: return -1 ser.write([MIDI_CHAN_MSG | chan]) ser.write([MIDI_CHAN_BANK]) ser.write([bank]) return 0 激发音符 def midiNoteOn(ser, chan, n, vel): if chan>15: return-1; if n>127: return-1; if vel>127: return-1; ser.write([MIDI_NOTE_ON | chan]) ser.write([n]) ser.write([vel]) return 0 停止音符 def midiNoteOff( ser, chan, n, vel): if chan > 15: return -1; if n > 127: return -1; if vel > 127: return -1; ser.write([MIDI_NOTE_OFF | chan]) ser.write([n]) ser.write([vel]) return 0 停止所有音符 def midiNoteAllOff( ser, chan): if chan>15: return -1 ser.write([MIDI_CHAN_MSG | chan]) ser.write([MIDI_NOTE_ALL_OFF]) ser.write([0x7b]) ser.write([0x7c]) ser.write([0x7d]) return 0[!--empirenews.page--] 播放一串变化的音符(Adafruit演示程序) def test_play_loop( ser, looptime ): print("===Music Start===") while looptime>0: i=60 while i<69: midiNoteOn(ser,0, i, 127); time.sleep(0.1) midiNoteOff(ser,0, i, 127); i=i+1 time.sleep(1) looptime=looptime-1 ser.close() print("===Music End ===") 以下为实现播放《献给爱丽丝》的代码: 定义音符 A2=0 #220Hz B2 = 1 H2 = 2 C2 = 3 Cis2= 4 D2 = 5 Dis2 = 6 E2 =7 F2 =8 Fis2 =9 G2 =10 Gis2 = 11 A3 =12 #440Hz B3 =13 H3 =14 C3 =15 Cis3 = 16 D3 =17 Dis3 = 18 E3 =19 F3 =20 Fis3 =21 G3 =22 Gis3 = 23 A4 =24 #880Hz B4 =25 H4 =26 C4 =27 Cis4 = 28 D4 =29 Dis4 = 30 E4 =31 F4 =32 Fis4 =33 G4 =34 Gis4 = 35 A5 =36 #1760Hz B5 =37 H5 =38 C5 =39 Cis5 = 40 D5 =41 Dis5 = 42 E5 =43 F5 =44 Fis5 =45 G5 =46 Gis5 = 47 A6 =48 #3520Hz B6 =49 H6 =50 C6 =51 Cis6 = 52 D6 =53 Dis6 = 54 E6 =55 EoS = 255 #End of score en =128 #End of line flag[!--empirenews.page--] 《献给爱丽丝》的乐谱: #8ms每单位 #For Elise (3/8, 60bpm) tone=[ 120, 0, E5|en, 150, 0, Dis5|en, 180, 0, E5|en, 210, 0, Dis5|en, 240, 0, E5|en, 14, 1, H5|en, 44, 1, D5|en, 74, 1, C5|en, 104, 1, A5, A3|en, 134, 1, E3|en, 164, 1, A4|en, 194, 1, C4|en, 224, 1, E4|en, 254, 1, A5|en, 28, 2, H5, E2|en, 58, 2, E3|en, 88, 2, Gis3|en, 118, 2, E4|en, 148, 2, Gis4|en, 178, 2, H5|en, 208, 2, C5, A3|en, 238, 2, E3|en, 12, 3, A4|en, 42, 3, E4|en, 72, 3, E5|en, 102, 3, Dis5|en, 132, 3, E5|en, 162, 3, Dis5|en, 192, 3, E5|en, 222, 3, H5|en, 252, 3, D5|en, 26, 4, C5|en, 56, 4, A5, A3|en, 86, 4, E3|en, 116, 4, A4|en, 146, 4, C4|en, 176, 4, E4|en, 206, 4, A5|en, 236, 4, H5, E2|en, 10, 5, E3|en, 40, 5, Gis3|en, 70, 5, E4|en, 100, 5, C5|en, 130, 5, H5|en, 160, 5, A5, A3|en, 190, 5, E3|en, 220, 5, A4|en, 24, 6, E5|en, 54, 6, Dis5|en, 84, 6, E5|en, 114, 6, Dis5|en, 144, 6, E5|en, 174, 6, H5|en, 204, 6, D5|en, 234, 6, C5|en, 8, 7, A5, A3|en, 38, 7, E3|en, 68, 7, A4|en, 98, 7, C4|en, 128, 7, E4|en, 158, 7, A5|en, 188, 7, H5, E2|en, 218, 7, E3|en, 248, 7, Gis3|en, 22, 8, E4|en, 52, 8, Gis4|en, 82, 8, H5|en, 112, 8, C5, A3|en, 142, 8, E3|en, 172, 8, A4|en, 202, 8, E4|en, 232, 8, E5|en, 6, 9, Dis5|en, 36, 9, E5|en, 66, 9, Dis5|en, 96, 9, E5|en, 126, 9, H5|en, 156, 9, D5|en, 186, 9, C5|en, 216, 9, A5, A3|en, 246, 9, E3|en, 20, 10, A4|en, 50, 10, C4|en, 80, 10, E4|en, 110, 10, A5|en, 140, 10, H5, E2|en, 170, 10, E3|en, 200, 10, Gis3|en, 230, 10, E4|en, 4, 11, C5|en, 34, 11, H5|en, 64, 11, A5, A3|en, 94, 11, E3|en, 124, 11, A4|en, 154, 11, H5|en, 184, 11, C5|en, 214, 11, D5|en, 244, 11, E5, C3|en, 18, 12, G3|en, 48, 12, C4|en, 78, 12, G4|en, 108, 12, F5|en, 138, 12, E5|en, 168, 12, D5, G2|en, 198, 12, G3|en, 228, 12, A4|en, 2, 13, F4|en, 32, 13, E5|en, 62, 13, D5|en, 92, 13, C5, A3|en, 122, 13, E3|en, 152, 13, A4|en, 182, 13, E4|en, 212, 13, D5|en, 242, 13, C5|en, 16, 14, H5, E2|en, 46, 14, E3|en, 76, 14, E4|en, 106, 14, E4|en, 136, 14, E5|en, 166, 14, E4|en, 196, 14, E5|en, 226, 14, E5|en, 0, 15, E6|en, 30, 15, Dis5|en, 60, 15, E5|en, 90, 15, Dis5|en, 120, 15, E5|en, 150, 15, Dis5|en, 180, 15, E5|en, 210, 15, Dis5|en, 240, 15, E5|en, 14, 16, Dis5|en, 44, 16, E5|en, 74, 16, Dis5|en, 104, 16, E5|en, 134, 16, H5|en, 164, 16, D5|en, 194, 16, C5|en, 224, 16, A5, A3|en, 254, 16, E3|en, 28, 17, A4|en, 58, 17, C4|en, 88, 17, E4|en, 118, 17, A5|en, 148, 17, H5, E2|en, 178, 17, E3|en, 208, 17, Gis3|en, 238, 17, E4|en, 12, 18, Gis4|en, 42, 18, H5|en, 72, 18, C5, A3|en, 102, 18, E3|en, 132, 18, A4|en, 162, 18, E4|en, 192, 18, E5|en, 222, 18, Dis5|en, 252, 18, E5|en, 26, 19, Dis5|en, 56, 19, E5|en, 86, 19, H5|en, 116, 19, D5|en, 146, 19, C5|en, 176, 19, A5, A3|en, 206, 19, E3|en, 236, 19, A4|en, 10, 20, C4|en, 40, 20, E4|en, 70, 20, A5|en, 100, 20, H5, E2|en, 130, 20, E3|en, 160, 20, Gis3|en, 190, 20, E4|en, 220, 20, C5|en, 250, 20, H5|en, 24, 21, A5, A3|en, 54, 21, E3|en, 84, 21, A4|en, 114, 21, H5|en, 144, 21, C5|en, 174, 21, D5|en, 204, 21, E5, C3|en, 234, 21, G3|en, 8, 22, C4|en, 38, 22, G4|en, 68, 22, F5|en, 98, 22, E5|en, 128, 22, D5, G2|en, 158, 22, G3|en, 188, 22, A4|en, 218, 22, F4|en, 248, 22, E5|en, 22, 23, D5|en, 52, 23, C5, A3|en, 82, 23, E3|en, 112, 23, A4|en, 142, 23, E4|en, 172, 23, D5|en, 202, 23, C5|en, 232, 23, H5, E2|en, 6, 24, E3|en, 36, 24, E4|en, 66, 24, E4|en, 96, 24, E5|en, 126, 24, E4|en, 156, 24, E5|en, 186, 24, E5|en, 216, 24, E6|en, 246, 24, Dis5|en, 20, 25, E5|en, 50, 25, Dis5|en, 80, 25, E5|en, 110, 25, Dis5|en, 140, 25, E5|en, 170, 25, Dis5|en, 200, 25, E5|en, 230, 25, Dis5|en, 4, 26, E5|en, 34, 26, Dis5|en, 64, 26, E5|en, 94, 26, H5|en, 124, 26, D5|en, 154, 26, C5|en, 184, 26, A5, A3|en, 214, 26, E3|en, 244, 26, A4|en, 18, 27, C4|en, 48, 27, E4|en, 78, 27, A5|en, 108, 27, H5, E2|en, 138, 27, E3|en, 168, 27, Gis3|en, 198, 27, E4|en, 228, 27, Gis4|en, 2, 28, H5|en, 32, 28, C5, A3|en, 62, 28, E3|en, 92, 28, A4|en, 122, 28, E4|en, 152, 28, E5|en, 182, 28, Dis5|en, 212, 28, E5|en, 242, 28, Dis5|en, 16, 29, E5|en, 46, 29, H5|en, 76, 29, D5|en, 106, 29, C5|en, 136, 29, A5, A3|en, 166, 29, E3|en, 196, 29, A4|en, 226, 29, C4|en, 0, 30, E4|en, 30, 30, A5|en, 60, 30, H5, E2|en, 90, 30, E3|en, 120, 30, Gis3|en, 150, 30, E4|en, 180, 30, C5|en, 210, 30, H5|en, 240, 30, A5, A3|en, 14, 31, E3|en, 44, 31, A4|en, 74, 31, C5, E4, C4, B4|en, 104, 31, C5, F4, C4, A4|en, 134, 31, C5, G4, E4, B4, G3|en, 164, 31, C5, F3|en, 194, 31, A4|en, 224, 31, C4|en, 254, 31, A4|en, 28, 32, F5, C4|en, 58, 32, A4|en, 73, 32, E5|en, 88, 32, E5, F3|en, 118, 32, B4|en, 148, 32, D4|en, 178, 32, B4|en, 208, 32, B6, D4|en, 238, 32, B4|en, 253, 32, A6|en, 12, 33, A6, F3|en, 42, 33, G5, E4|en, 72, 33, F5, B4, G3, F3|en, 102, 33, E5, E4|en, 132, 33, D5, B4, G3, F3|en, 162, 33, C5, E4|en, 192, 33, B5, F3|en, 222, 33, A4|en, 252, 33, A5, C4|en, 26, 34, A4|en, 56, 34, A5, C4|en, 71, 34, G4|en, 86, 34, A5, A4|en, 101, 34, B5|en, 116, 34, C5, F3|en, 146, 34, A4|en, 176, 34, C4|en, 206, 34, A4|en, 236, 34, D5, C4|en, 10, 35, Dis5, A4|en, 40, 35, E5, E3|en, 70, 35, A4|en, 100, 35, C4|en, 130, 35, E5, A4|en, 160, 35, F5, D4, D3|en, 190, 35, A5, F3|en, 220, 35, C5, G3|en, 250, 35, E4|en, 24, 36, G3|en, 54, 36, E4|en, 84, 36, D5, G3|en, 114, 36, G4|en, 129, 36, H5|en, 144, 36, D5, E4, C4|en, 159, 36, G5|en, 174, 36, G4|en, 189, 36, G5|en, 204, 36, A5|en, 219, 36, G5|en, 234, 36, H5, G4, F4|en, 249, 36, G5|en, 8, 37, C5, G4, E4|en, 23, 37, G5|en, 38, 37, D5, G4, F4, D4|en, 53, 37, G5|en, 68, 37, E5, G4, E4, C4|en, 83, 37, G5|en, 98, 37, C6|en, 113, 37, H6|en, 128, 37, A6, A4, F3|en, 143, 37, G5|en, 158, 37, F5|en, 173, 37, E5|en, 188, 37, D5, H4, G3|en, 203, 37, G5|en, 218, 37, F5|en, 233, 37, D5|en, 248, 37, D5, E4, C4|en, 7, 38, G5|en, 22, 38, G4|en, 37, 38, G5|en, 52, 38, A5|en, 67, 38, G5|en, 82, 38, H5, G4, F4|en, 97, 38, G5|en, 112, 38, C5, G4, E4|en, 127, 38, G5|en, 142, 38, D5, G4, F4, D4|en, 157, 38, G5|en, 172, 38, E5, G4, E4, C4|en, 187, 38, G5|en, 202, 38, C6|en, 217, 38, H6|en, 232, 38, A6, A4, F3|en, 247, 38, G5|en, 6, 39, F5|en, 21, 39, E5|en, 36, 39, D5, H4, G3|en, 51, 39, G5|en, 66, 39, F5|en, 81, 39, D5|en, 96, 39, E5, A4, Gis3|en, 111, 39, F5|en, 126, 39, E5|en, 141, 39, Dis5|en, 156, 39, E5|en, 171, 39, H5|en, 186, 39, E5|en, 201, 39, Dis5|en, 216, 39, E5|en, 231, 39, H5|en, 246, 39, E5|en, 5, 40, Dis5|en, 20, 40, E5|en, 110, 40, H5|en, 140, 40, E5|en, 170, 40, Dis5|en, 200, 40, E5|en, 48, 42, EoS|en][!--empirenews.page--] 单个音符播放和停止: def note_on( ser,key,chan ): realkey = (key&0x7F)+40 print("key on: %u "% realkey ) midiNoteOn(ser,chan, realkey, 127); def note_off( ser,key,chan ): realkey = (key&0x7F)+40 print("key off: %u "% realkey ) midiNoteOff(ser,chan, realkey, 127); def note_all_off( ser ): print("key off" ) midiNoteAllOff(ser,0) 播放乐谱的函数 def play_tone( ser,tone ): name = input("Push Enter to play!") print("Song Start") score_idx = 0 s = 0 sleeptime0 = 0 sleeptime1 = 0 sleeptime = 0 tickcount = 0 chan = 0 while score_idx < len(tone): sleeptime0 = (tone[score_idx]+tone[score_idx+1]*256)*8/1000 sleeptime = sleeptime0-sleeptime1 sleeptime1 = sleeptime0 print("sleep: %5.2f"%sleeptime) time.sleep(sleeptime) note_all_off(ser) score_idx = score_idx+2 always = 1 while always == 1: s = tone[score_idx] score_idx = score_idx+1 if s== EoS: print("Song End") return else: note_on(ser,s,chan) if (s&en)!=0: if tickcount<7: tickcount=tickcount+1; else: tickcount = 0 if chan==0: chan=1 else: chan = 0 break; 测试程序 ser = vs1053_midi.vs1053_midi_setup("com5") #vs1053_midi.test_play_loop(ser,5) vs1053_midi.play_tone(ser,vs1053_midi.tone) 程序运行如下:

    时间:2018-08-09 关键词: MP3 解码 音频 播放器 嵌入式音频 audio adafruit feather ogg

  • 树莓派的面子,就交给PitTFT吧

    树莓派的面子,就交给PitTFT吧

     树莓派的初衷是提供一台廉价的教育电脑,让全世界所有的孩子都能借助它来探索神秘的电脑及编程世界。 树莓派变成大人的玩具,估计是树莓派的创始人始料未及的。使用树莓派的标准姿势是将它与显示器及键盘鼠标连接,当成一台标准的PC来用。不过随着树莓派的越来越普及,为树莓派添加一个便携的显示屏,使之更具便携性就成了迫切的需求,毕竟,不是所有的场合都能立即找到一台空闲的显示器来连接树莓派。 Adafruit推出的PiTFT,可以说是专门为树莓派量身定做,在不影响树莓派便携性的情况下,还能为树莓派提供显示功能,让树莓派更有面子。 PiTFT有多种规格可选,2.8吋的屏一般提供320X240的分辨率,而3.5吋屏则提供480X320的分辨率,本次使用的产品型号为3.5吋屏,屏幕分辨率则为480X320,通过SPI接口与树莓派通信,能提供基本的显示功能。受限于SPI接口的限制,刷新率方面会有一定的影响,不过做为基本显示来说,足够用了。另外一个特色是该屏还提供了电阻触摸,对于简单的图形演示,甚至可以连键盘和鼠标都扔了,直接在上面用手指点、戳,充分发挥二指禅神功。 Adafruit最喜欢黑色,无论是产品还是包装,大都以黑色为主。此次的PiTFT也未能免俗,黑白配,给人很神秘的感脚!包装盒列出了产品的型号及规格,是3.5吋的屏,分辨率为480X320。另外从包装盒上也可以了解到,该屏已组装好,可以直接连接到树莓派上,即插即用!菜鸟们听了都表示很好,很方便。 打开来看,首先是保护措施很到位,厚厚的防震泡沫,保证运输过程不会伤及到产品。看起来似乎和树莓派的尺寸差不多,四角有定位孔,不过似乎和树莓派没关系,这要装上去看会感受到。新产品上还有一层保护膜,使用前可以揭开,触摸的灵敏度会更好。 显示屏的背面,可以看到显示方案使用的是STMPE610加HX8357D,显示屏通过FPC连接到PCB板上的显示主控。另外还提供了两组GPIO接口,上图中左侧的接口与树莓派相连并实现与树莓派的通信,上部的GPIO接口则是引出的接口,可以用来连接外部传感器,完全不用担心GPIO全部被显示屏遮挡! 安装后的样子,与树莓派大小一致,美中不足的是显示屏四角的四个固定孔,有点超出了。 官方提供了配套的设备驱动及安装脚本,安装过程并不复杂。在组装好硬件后,给树莓派上电。注意,由于添加了显示屏,消耗的电流明显增大,请注意准备一个标准的5V/2A电源适配器,如果放到电脑的USB接口,小心可能会烧掉USB HUB! 打开一个终端窗口,执行如下的命令 cd ~ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/adafruit-pitft.sh chmod +x adafruit-pitft.sh sudo ./adafruit-pitft.sh 接下来就是根据实际需要选择相关的设置,以便能在显示屏上输出画面。 第一步是选择屏幕类型,根据实际的硬件来选择参数,这里选择4,即3.5吋的规格,不用担心选错了,发现错误,重新运行该配置脚本就可以重新设置。 接下来是选择屏幕方向,根据实际情况,选择LANDSCAPE或PORTAIT模式,即横屏或竖屏模式 PiTFT支持双屏输出,即板载的HDMI正常输出,同时在PiTFT上输出控制台或直接镜像HDMI输出到PiTFT上,接下来配置如何在PiTFT上要显示的内容 这里询问显示在PiTFT上的内容,如果回答y,则显示控制台内容,实现双显示输出 最后一步询问是否将HDMI输出镜像到PiTFT,如果选y,将实现镜像输出,否则PiTFT将进入到FrameBuffer模式,一般情况下PiTFT将黑屏,除非强制使用framebuffer输出,将内容显示到PiTFT上。 上述配置过程可以反复执行,以满足不同的用户需求。 先来看看HDMI镜像输出的效果,即将PiTFT当成一个普通的显示器来使用 这是实际的输出效果,实际显示效果要更好一点。可以看到经典的树莓派桌面,唯一的遗憾是屏幕尺寸小了点,如查多打开几个程序,会发现任务栏上很挤 这是控制台显示的效果,现在可以接上键盘,好好玩一下纯正的linux命令了。 还有一种方式就是framebuffer模式了,一般情况下,PiTFT是黑的,使用mplayer等支持framebuffer输出软件时,需要强制指定输出位置,如下命令所示 mplayer -vo fbdev:/dev/fb1 bigbuckbunny320p.mp4 这里指定强制将内容输出到/dev/fb1,也就是在PiTFT播放电影内容,实际播放效果如下 远程终端上输出的内容如下 音频、视频解码正常,接上耳机就可以看电影了,不过速度有点慢! 按照官方的说法,可以调整SPI的速度来达到更好的显示性能,具体方法是修改config.txt的内容,调整到如下设置 dtoverlay=pitft28r,rotate=90,speed=62000000,fps=25 按照此设置重启后,显示屏常亮!当然也就没有输出内容了,测试时使用的树莓派版本了2B+。经多次尝试后,终于调整到一个比较好的状态,具体参数如下 dtoverlay=pitft28r,rotate=90,speed=32000000,fps=25 现在终于能看了。 接下来准备写个小小的GUI DEMO,也算是抛砖引玉! 用PYQT5来写个小小的DEMO,看下在PiTFT上运行的效果如何。首先得安装QT5的Python绑定,具体安装过程就不赘述了,直接上代码,看效果! 代码如下 from PyQt5.QtWidgets import QApplication, QWidget import sys app = QApplication(sys.argv) w = QWidget() w.setWindowTitle('Hello, Pi!') w.resize(200, 200) w.show() sys.exit(app.exec_()) 非常简单的一段代码,使用QWidget作为主窗口,然后显示,内容是空的,不过这不影响咱的测试效果。 这个得在X11下才能运行,虽然也可以写基于FrameBuffer版本的测试代码,不过要完整的编译QT才行,考虑到树莓派的性能,需要的时间估计有点长。 这个就是在桌面上运行的效果,没毛病,界面出来了,现在如果有时间,可以整一个复杂的界面来玩玩了。好吧,这个任务就由你来实现了,赫赫! 对于树莓派而言,传统的玩法无外乎两种:外接一个显示器,当成PC来玩;使用HEADLESS模式,使用终端来玩。现在有了PiTFT,又多了一种玩法,直接揣在口袋里,再准备一个MINI键盘,一机走天下! 也许你的荣耀,就藏在这个不起眼的PiTFT中,要装X和正准备装X的兄弟,玩起来,HIGH起来!不过话又说回来,装X是要代价的,PiTFT的代价就是340RMB,MOUSER.CN有售。 参考资源: PiTFT: https://www.adafruit.com/product/2097

    时间:2018-06-12 关键词: 树莓派 adafruit 显示屏 拓展版 tft pittft 3.5寸 480x320

  • 比第一代更完美,适用性更强——Circuit Playground Express评测

    比第一代更完美,适用性更强——Circuit Playground Express评测

     Circuit Playground Express是Adafruit推出的新一代开发板,集电子知识及编程技术于一体,是更完美的下一代开发工具。Express版本是Circuit Playground Classic的升级版,该版本更加完美!新版本不仅集成了更多的传感器,同时也使编程变得更加简单和有趣。 如果是入门者,可以使用Microsoft MakeCode来进行图形化程序开发,该IDE基于Javascript语言。也可以使用它来尝试CircuitPython,Python解释器在Express上运行。随着对编程技术的慢慢深入,还可以使用Arduino IDE,Arduino使用C/C++语言,完全可以控制低层的硬件工作,创作强大的项目完全不在话下。目前,该主板不支持Firmata / Code.org 。 因为可以通过三种不同的方式来进行Express编程,相对来说,Express具有更高的附加值及可重用性。无论是初学者还是资深的电子工程师, Circuit Playground Express都有适合每个人的东西。 Express使用圆形设计,并在其周围提供了适用鳄鱼夹的焊盘,因此不必焊接即可使其工作,相对于传统使用面包板来搭建电路而言,这种连接方式更快捷。可以使用USB, AAA电池组或Lipoly电池(适用于高级用户)供电,供电方式更灵活。除此之外, Circuit Playground Express具有内置USB支持,内置USB意味着你一旦连接好设备就能显示并开始工作,不需要特殊的电缆或适配器。将代码写入开发板后,使用其它的供电方式给开发板供电,开发板就能正常工作。 以下是Circ Circuit Playground Express的主要特色: • 10个迷你NeoPixels,每个都可以显示任何颜色 • 1个运动传感器(LIS3DH三轴加速度传感器,带有抽头检测,自由落体检测) • 1 x温度传感器(热敏电阻) • 1个光传感器(光电晶体管)。也可以充当颜色传感器和脉冲传感器。 • 1个声音传感器(MEMS麦克风) • 1个带D类放大器的迷你扬声器(7.5mm磁性扬声器/蜂鸣器) • 2个按钮,标记为A和B. • 1个滑动开关 • 红外接收器和发射器 - 可以接收和发送任何遥控代码,并在Circuit Playground表示之间发送消息。也可以充当接近传感器。 • 8个鳄鱼夹友好的输入/输出引脚 • 包括I2C,UART,可以做模拟输入的8个引脚,多个PWM输出 • 7个焊盘可以充当电容式触摸输入,其余的1个是真正的模拟输出 • 绿色的“开”LED让你知道它的电源 • 红色“#13”LED用于基本闪烁 • 复位按钮 • ATSAMD21 ARM Cortex M0处理器,运行在3.3V和48MHz • 2 MB SPI Flash存储器,主要用于CircuitPython存储代码和库。 • MicroUSB端口用于编程和调试 • USB端口可以像串行端口,键盘,鼠标,操纵杆或MIDI!  Circuit Playground Express的神奇之处在于可以通过三种方式: • MakeCode • CircuitPython • Arduino IDE(或直接ARM GCC编程) 如果这是你第一次编程或编码,Adafruit官方建议从 MakeCode 开始 - 它不仅适用于 Circuit Playground Express,而且还可以快速开始编程,但一般都是编码!(一旦你掌握了MakeCode,你就可以看看CircuitPython或者Arduino了。) MakeCode不需要任何软件安装,它可以在任何带有Web浏览器的计算机上运行。你可以在Mac,Windows,Linux和Chromebook上使用它。MakeCode使用像Scratch一样的拖放块,没有语法或分号。块拼接在一起创建更大和更复杂的项目。MakeCode让你在5分钟或更短的时间内开始使用,内置了指南和项目,但它也很有趣。MakeCode的运行时间令人惊讶,尽管看起来非常简单,但它可以完成通常需要高级编程的非常复杂的任务。你可以非常迅速地获得创意。 MakeCode与Scratch、Node-Red一样,都是使用图形化的编程模式,非常适合初学者或者小朋友来进行电子入门编程。MakeCode针对Express开发板提供了许多现成的组件,当然也包括复杂的程序逻辑组件如条件模块、比较模块来实现程序逻辑。 下图是一个简单的流水灯效果开发界面 在主工作界面的LIGHT模块里包含一个快速的演示功能,如图所示,该模块的功能就是在指定的时间内对板载的LED灯进行循环显示,显示周期为500ms,结合外层的forever无限循环功能,就可以制作出非常惊人的灯光效果,同时在MakeCode的左侧,还能看到实时的模拟效果! 注意到图中"show animation..."模块中的下拉列表指示标志,这里可以选择不同的灯光效果,如下 一亘完成了程序功能的设置,可以点击主工作界面的“Download”按钮,下载生成的.uf2格式的代码文件,该文件可以直接拖放到USB接口映射的大容量磁盘里,从而将代码文件上传到开发板,确实非常方便! 这里补充一下,要进入下载模式,只需要按一下Express开发板上的reset键,然后松开,等开发板上的LED灯变绿,就进入了下载模式。此时在PC端会有一个名为CPLAYBOOT的磁盘,将下载的.uf2文件直接拖到该磁盘,就完成了下载,开发板自动复位,开始运行刚下载的代码。 随着人工智能和机器学习的慢慢普及,Python也渐渐进入大众的视野。毫无疑问,Python是一门非常适合入门AI的程序设计语言,借助这个小小的Express开发板,小小的探索一下Python的奇妙世界,未尝不是一件美事! Python是发展最快的编程语言,它是一种高级编程语言,这意味着它的设计更容易阅读,编写和维护。Python支持模块和软件包,可以轻松地将你的代码用于其他项目。它有一个内置的解释器,这意味着没有额外的步骤,如编译,让你的代码工作。当然,Python是开源软件,意味着任何人都可以免费使用,修改或改进。CircuitPython被设计为在微控制器板上运行。微控制器板是带有微控制器芯片的主板,实际上它是一台小巧的一体机。你持有的电路板是一块微控制器板!CircuitPython易于使用,因为你只需要使用这个小小的开发板,使用USB电缆和计算机连接好就行了。 CircuitPython为所有这些惊人功能增加了硬件支持。如果你已经具备Python知识,那么你可以轻松将其应用于使用CircuitPython。如果你以前没有经验,其实开始真的很简单! 要在Express上体验Python,首先要将Express开发板变成一个Python解释器,官方为我们提供了专门的.uf2文件,只要将该文件写入到Express开发板,就可以在Express体验Python的开发了。 上图演示了将CircuitPython固件写入到Express开发板的过程。 官方为CircuitPython提供了一个专用的Python代码编辑器,名为Mu,从官方网站下载Mu编辑器安装,接下来使用Mu来写一段简单的代码并让它开始工作 除了熟悉基本的Python语法,要让Express工作的话,还需要熟悉一下具体的硬件库,如上述代码中的board及pulseio模块,好在Python提供了强大的内置帮助功能,使用Mu提供的REPL功能,我们能迅速找到相关的帮助。借助dir命令,可以快速查看相关的信息,如board模块中提供的A0、A1及D13,这些都是开发板引出的引脚,可以连接外部设备来进行编程并使之工作。 上述代码演示了使用内置的D13引脚来输出PWM信号,如果你熟悉PWM的工作机制,想必对于频率及占空比这些概念一定非常熟悉,这段代码就是通过调整占空比来实现PWM输出的。 将代码保存到开发板映射到PC端的磁盘上,命名为main.py,然后就会看到开发板上的LED灯开始呼吸了! 真的不难! 对于喜欢C/C++的用户来说,使用Arduino IDE也可以控制及读取相关的外设信息,不过说实话,Express已板载了这么多传感器及其它功能器件,常见的都有了。不过对于小编来说,有了图形化及Python环境,就够用了,还要什么自行车! 总结来说,Express开发板的优点如下: • 体积小巧,方便携带 • 板载丰富的功能器件,再也不用搭建实验电路了 • 开发环境丰富,支持图形化、Python及C/C++等开发语言,老少咸宜 • 丰富的教程及DEMO,可以快速入门,老用户也可以找到大量的参考代码,直接使用,节省不少的时间 • ... 对于一块$24.95的开发板来说,咱还能有更多的要求么!截止本文完工时,官网上显示这块开发板已OUT OF STOCK!!! 参考资源: EXPRESS开发板:https://learn.adafruit.com/adafruit-circuit-playground-express MakeCode: https://makecode.adafruit.com/ Mu:https://learn.adafruit.com/adafruit-circuit-playground-express/installing-mu-editor

    时间:2018-06-06 关键词: Atmel microsoft MCU Circuit adafruit python playground makecode

  • 多年使用AVR开发的“集大成者”——Adafruit Metro328评测

    多年使用AVR开发的“集大成者”——Adafruit Metro328评测

     Metro 328 是一款全兼容Arduino的开发板,由开发过各种很“酷”的DIY套件和扩展版的Adafruit出品。Arduino是一个包含硬件和软件开源的电子原型平台,从创立到现在的十几年里已经推出和衍生了众多的型号,在众多的创客、Hacker、电子DIY爱好者中久负盛名,要是没用过Arduino估计都不好意思和别人说自己真正玩过“开发板”,比较悲伤的是在遇到这块Metro 328之前我还没有玩过任何一款Arduino板子,感谢21IC开发板评测栏目组能让我从Arduino的世界走过。 Metro 328的主控为ATmega328 ,Metro 系列根据尺寸和配置的不同还有一款小块头的Metro Mini 和一个主控为SAMD21的Metro M0 Express,Metro 328的包装采用黑色的小盒子,正面是白色文字Metro及几条抽象电路走线,简约美观。     打开包装盒可以看到小巧的Metro 328以及Adafruit 很贴心送的4个黑色的小药丸( 官方叫Rebber Bumper---其实就是橡胶缓冲器),可以直接贴到板子的背面用于保护板子不被磨损。     把目光聚集到Metro 328板子本身,板子的丝印详细标注了各个扩展接口的功能,电源、模拟输入、数字接口、串口、IIC,ATmega328的各种外设几乎都引出了扩展接口。     Metro 328 详细的硬件资源如下: 电源: 7-9V的DC供电或者Micro USB,在2.1mm DC 插孔旁边有个开关可以用于关闭或者打开DC的供电的功能。 GPIO: 6个模拟输入,6个PWM输出,1个硬件SPI,一个硬件IIC,一个硬件UART 4个LED: 绿色的电源指示灯,2个RX/TX通信指示灯,1个红色LED可以用于点灯使用,下面我们点灯就用它。 下载接口: Metro 上的ATmega328 内置了 Optiboot bootloader,可以方便的使用Arduino IDE下载 Micro USB: 这个USB是USB转串口可用于输出调试信息,内置bootloader用于更新下载通信。 Metro 328 的所有元器件有是贴片的封装放置在了板子的正面,背面只有Adafruit Logo 和Metro 标志。     在简单的了解Metro 328的硬件配置和外设资源之后,我们开始体验下开发板的软件开发的流程。不得不说adafruit真可是个非常贴心的公司,为了让各种各样的使用者快速上手开发板,adafruit提供了一个详细的指导文档,从配套开发板的各个扩展元器件到IDE的使用再到各个函数API的含义都有详细的解释,即使从来没有接触过Arduino的也能通过这个文档快速上手学习这个开发板。因为完全兼容Arduino Uno,熟悉Arduino 的同学可以很快的上手了。 文档的在线地址为:https://learn.adafruit.com/experimenters-guide-for-metro/intro 也可以下载文档看:https://cdn-learn.adafruit.com/downloads/pdf/experimenters-guide-for-metro.pdf 如果你看了上面的文档就会发现,里面的各个例子描述的是配套的Metro 328的外设配件,官方的确有个完整的套件出售,如果预算足够可以选购带扩展的套件进行学习,官方提供了几个可选的套件。     如果电脑上没有没有安装Arduino IDE 要先下载安装,然后还要下载安装一个adafruit Boards Driver ,这里包含了Metro 328 USB转串口的驱动程序,如果是WIN10电脑不安装这个驱动也会自动加载兼容驱动也能正常工作。 打开安装好的Arduino IDE ,在菜单File-->Preferences 中添加adafruit 的开发板的板子支持包地址 1https://adafruit.github.io/arduino-board-index/package_adafruit_index.json     这样我们就可以在Tools->Board->Boards Manager 中安装Metro 的支持包了。     这个时候还要在Tools->Port 选择Metro 328在电脑上枚举的串口,我电脑上是COM7,这2步都整好了就是下面这个样子的。     Arduino 很大强大的部分就体现在软件的开发非常简单,有非常多的开源的例子可以直接使用,这给初学者降低了门槛,能让更多人加入使用Arduino的大军中。软件底层大都进行了封装,用户直接调用API进行操作,简单快捷。 详细的文档可参考:https://www.arduino.cc/reference/en/#functions Arduino IDE 中有很多的例子可以直接使用,我们可以从下面的菜单找到点灯的程序   [!--empirenews.page--]   点灯的代码如下,主要有2个函数,负责初始化的setup()和负责死循环执行任务的loop(),只需要将初始化的代码和任务代码分别加到上面2个函数中去就行。这里我们保持代码不修改,直接编译下载到Metro 328 ,就是这么简单。 1// the setup function runs once when you press reset or power the board 2void setup() { 3 // initialize digital pin LED_BUILTIN as an output. 4 pinMode(LED_BUILTIN, OUTPUT); 5} 6 7// the loop function runs over and over again forever 8void loop() { 9 digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) 10 delay(1000); // wait for a second 11 digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW 12 delay(1000); // wait for a second 13} 程序执行的效果如下:     体验了点灯的快捷方便后,我们也可以试着自己编写一个小程序,使用Metro 328 的串口输出字符。这个时候如果我们不知道串口的初始化和输出函数API该如何调用可以先去上面的网站:https://www.arduino.cc/reference/en/#functions 查看有关通信的的Serial的部分内容,里面有详细的的函数说明和代码例子可以参考。下面的代码是周期打印字符到串口外设,串口的初始化和打印函数都非常简单。 1// the setup routine runs once when you press reset: 2void setup() { 3 // initialize serial communication at 9600 bits per second: 4 Serial.begin(9600); 5} 6 7// the loop routine runs over and over again forever: 8void loop() { 9 Serial.print("Hi,I am Metro 328\r\n"); 10 delay(1000); // delay in between reads for stability 11} 串口输出如下,     上面2个例子虽然比较简单但是可以让我们体验Metro 328 使用Arduino IDE 进行快捷方便的开发过程,这样我们就对Metro 328的使用有个整体认识了,对应其他的外设使用和扩展控制都可以去网上查看相应的API函数和参考例子。官方的教程中也说明了在Mac和Linux中如何安装IDE和使用开发板,如果你有这方面的需求可以参考上面提到的文档。 Adafruit说他们非常喜欢使用ATmega328这个芯片去做各种的开发板和项目,Metro 328是他们在多年使用AVR后开发的一个“集大成者”,无论你是大神或者小白,想要快速实现一个功能又不想牵涉太多精力在底层的驱动部分,那么Metro 328可以满足你,他数量众多的IO和外设都被引出接口,它兼容Arduino拥有很多开源的代码和易于使用的IDE,能帮你快速的建立的项目原型。最后感谢Arduino的开源和Adafruit 充满魔性的创意。

    时间:2018-05-09 关键词: Arduino MCU adafruit AVR atmega328 metro328

  • 再不学点Python,咱真老了--Adafruit Metro M0 Express开发板评测

    再不学点Python,咱真老了--Adafruit Metro M0 Express开发板评测

    曾几何时,流行过这么一句话:再不疯狂我们就老了!这是青春的再召唤,还是献给青春的挽歌,个中滋味,也许只有内心自知! 在AI蓬勃发展的今天,IT巨头都在悄悄布局,做为IT人的你,是否也准备好了?虽说Python不是进入AI领域的最佳编程语言,但毫无疑问,Python是进入其中并探索AI奥秘非常流行的编程语言。所以,趁着还年青,无论是心理还是身理,亦或是职业生涯的青春期,学点Python吧! Adafruit推出的Metro M0 Express开发板,集MCU开发与Python一体,确实是入门Python的极佳开发板。纯Python学习,不免枯燥,如果还能在开发板上点个灯,是不是会更好一点!(话外音:还是枯燥!) 除了Python,还可以使用Arduino来开发、测试,也算是一专多能了。 先看板,再点灯,此乃学习电子的不二法门(个人经验,切勿模仿)。 初看,这货不是Arduino板么?其实不是滴,虽具其形,但内心更强大。Metro M0 Express拥有一颗 ATSAMD21G18芯,相比ATmeg328来说,在主频及存储方面都有极大的提升。引脚全面兼容Arduino UNO。 供电方面,新增了7V~9V DC供电接口,DC Jack规格为5.5/2.1mm,极性内正外负,旁边还有一个物理开关,手动打开或关断电源。 与Arduino不同的是,GPIO接口不再使用过孔,而是使用贴片式,开发板背面整体一块,配合Metro Express的大大Logo,更显大气。 硬件配置方面,MCU型号为ADSAMD21G18,最高运行主频为48MHz,3.3V工作电压。存储组合则为256KB的Flash存储加32KB的SRAM;另外还板载了一片4MB的SPI存储,进一步扩充了存储需求。 Metro Express的主要特性如下: • ATSAMD21G18核心,最高运行主频为48MHz • 256KB/32KB的存储组合 • 2MB SPI Flash存储扩展 • 32.768KHz晶振 • 3.3V电压调节器,最大支持500mA电流 • 原生USB支持,不再需要FTDI转串口支持 • 硬件串口/I2C/SPI支持 • PWM输出 • 25个GPIO,工作电压为3.3V • SWD调试接口 • 电源开关 值得指出的是,25个GPIO可除了可以复用做数字/模拟引脚外,其中还包括了一个真正的模块输出引脚A0。另外原生的USB支持,免去了类似FTDI之类的转换芯片,USB接口除了可以充当串口通讯设备外,还可以连接键盘、鼠标及MIDI设备。 另外在开发板上也集成了一个SWD调试接口,只是不知道在Arduino环境里如何使用它? 先不管这些了!上个电看看。 使用MicroUSB转换线连接开发板的USB口与PC连接,测试用的PC上安装的是Windows 10系统。当开发板与PC连接后,通过USB给开发板供电。上电后开发板的三色LED灯循环变换显示颜色,另外指示串口通信的TX指示灯开始闪烁。 Windows 10自动检测到串口设备并安装了正确的驱动程序,如下 另外PC上会多出一个大容量存储磁盘,其中包含了PYTHON启动代码及相关的资源,如下 其中main.py里面包含了相关的功能代码。在串口的输出如下 这个默认的程序有点复杂,对于初学者来说,咱们来尝试写个简单的点灯程序,也算是第一个hello world程序。 我们知道在PC上写Python程序,有很多的IDE可供选择。那么在为MCU写代码时,有什么好的IDE可供选择呢?Adafruit官方推荐使用Mu来作为Metro M0 Express的IDE。从官网下载并安装Mu程序,启动后画面如下 界面比较朴素,没有什么噱头!不过这个IDE提供了一个REPL控制台,这是个很实用的程序。当然你也许会想,用VSCode行不?用Spyder行不?当然也行,不过我们知道Python程序都提供了一个REPL环境供用户获取帮助或实验简单的代码,这个时候这些IDE就没有用了,因为这些IDE都是基于PC端的Python解释器! 先写一段简单的Python代码,与MCU无关,纯粹是验证Python解释器。 代码如下 import time s = 0 for i in range(10): print(i) time.sleep(1) print('s = {}'.format(s)) 将代码保存为sum.py,如下 [!--empirenews.page--] Mu聪明的地方在于它能将代码保存到开发板映射到PC的磁盘上,将文件命名为sum.py并保存。然后看串口中是否有输出。然而并没有,仍然是main.py程序的输出! 原来,CircuitPython在处理程序的执行时,会遵循一定的规则。CircuitPython会在磁盘上依次查找code.txt, code.py, main.txt及main.py,找到并执行第一个程序。咱们将上述代码保存为sum.py,根本不是上述文件之列,所以刚创建的文件根本就不会运行! 明白了这一点,就好办了。只需要将sum.py更名为code.py就可以了,试试! 更名后的代码文件即时生效了,如下 可以看到咱们期望的结果了。 不止如此,提示还给出了一些有用的信息,比如"Auto-reload is on"这句话告诉我们,代码文件修改并保存后会即时生效,同时我们也看到了code.py执行会优先于main.py。 最后一个有趣的地方在于,当code.py执行完毕后,我们可以按任意键进入REPL环境,如下 确实很好很强大! 不过我们前面提到Mu这个IDE时也说了,Mu本身就提供了一个REPL环境, 下面这个窗口就是REPL环境了,这是个很有用的窗口,例如我们想看看开发板GPIO接口的命名,可以在REPL里执行如下命令 熟悉Arduino编程的用户一定对A0、A1这些接口耳熟能详,所以,如果要引用其中一个接口,按照Python的规则,应该是board.XX,其中XX就是上面列出的名称了。 好,下面开始正式点灯,编辑如下代码 很光棍的一段代码,当然也好懂!保存,然后就自动运行了。看到LED灯闪啊闪,串口也有对应的输出。 然而问题来了,Cpython中的哪些库可以用呢?这个可以参考官方的文档,参见附录。上面代码中用到的一些库都在参考资源中列出来了,花5分钟熟悉一下! 说了半天,CircuitPython是啥?CircuitPython是大名鼎鼎的MicroPython的再移植产品,专门为Adafruit的部分硬件定制。 除了支持Python,开发板也支持Arduino模式开发。按照Arduino一般的开发模式,首先要下载并安装对应的板级库文件,Metro M0 Express也不例外,如下 确定后,就可以在Arduino的开发板管理器里添加对应的开发板类型了。这里碰到一点糟心的事,就是官方的PDF文档里举例使用的是另一款开发板,不是针对Metro M0 Express的,花了很长时间安装后却发现找不到Metro M0 Express这一开发板型号,重新在网页版里找到了正确的库文件后才解决!因为Arduino现在支持的开发板种类太多,很多开发板的命名也比较相似,结果往往就是找错了对象,闹了笑话,浪费了时间! 下图是正确安装了软件库后显示的板卡名称 现在可以打开一个blink程序来点灯了,编译并上传的结果如下 LED灯又开始闪烁了。 不过问题又来了,Python不能用了! 这是正常现象,现在的存储空间被ARDUINO程序占用了,所以PYTHON当然也就不能用了。怎么办呢,下面是切换回Python的方法。 首先双击开发板上的复位键,进入bootloader模式,此时PC端映射的盘符会变成METROBOOT,里面有3个文件,如下 从附录给出的CircuitPython参考里下载一个扩展名为.bin的文件,注意不要下载错了,必须是针对Metro M0的.bin文件,然后拖动到映射的盘符里,等待大约15秒钟,奇迹出现了,CircuitPython又出现了。只是此时的CircuitPython里还没有创建可运行的Python文件,自己写一个,命名为code.py或main.py,然后丢到映射盘里,又可以了! 总体来说,Metro M0 Express还是很好玩的。首先是硬件参数提升了,更高的运行主频及更大的存储空间,完败Arduino UNO R3!;其次,引入了CircuitPython的新式编程语言,一方面程序代码更简单,另一方面也为那些想要学习和了解Python的用户提供了一个学习的理由;最后一点就是灵活的引导配置模式,使得在二种编程语言(c/c++及Python)之间可以灵活切换! 至于配置过程中碰到的文档不一致的问题,只能怪笔者看文档的时候不够细心,不过如果官方在整理文档时,针对性更具体一点,也许用户的体验会更好一点吧! 附录: CircuitPython参考:https://github.com/adafruit/circuitpython 开发板:https://www.adafruit.com/product/3505

    时间:2018-04-09 关键词: Atmel express MCU 开发板 adafruit m0 python metro atsamd21

  • 树莓派也可以用的触摸屏——Adafruit2.8寸触摸屏

    树莓派也可以用的触摸屏——Adafruit2.8寸触摸屏

    一. 前言 近些年来开源硬件非常流行,说到开源硬件就不得不说Raspberry PI树莓派,它是一个具备高级功能的嵌入式Linux主板,可以实现完整的计算机功能,近些年来因为树莓派的便宜,方便使用等诸多因素导致树莓派非常火热,受到众多开发者的热爱,随着树莓派的流行,树莓派的相关扩展模块也随之盛行起来,今天小编拿到了一款来自Adafruit的2.8寸触摸屏。 二. 定位 树莓派在使用的过程中需要外接屏幕,可以使用HDMI连接显示器也可以使用也可是使用DSI接口外接屏幕使用,今天我们看到的屏幕是可以连接到树莓派的扩展插针上的,并且带有出触摸功能,这样将大大的方便了树莓派的开发和使用,接下来我们就看看这款小巧的屏幕。 三. 开箱 今天小编拿到了这款触摸屏,如下图: 全黑色的纸盒包装上贴有PiTFT 2.8’’320x240 RasPI+touch的字样,说明这款触摸屏的分辨率为320x240,具有触摸功能。 打开包装后就可以看到屏幕的样子,如下图: 屏幕的左侧为屏幕的基本信息,右侧和右下侧为连接器,左下侧为4个未焊接的按键位置。 屏幕背面,如下图: 在屏幕背面可以看到LCD和PCB通过一个FPC连接。 下面先来PO两张合体照吧: 四. 产品功能 该屏幕将LCD安装与PCB上,使用I2C和SPI与树莓派通信,使用了GPIO扩展了按键,屏幕下方的4个按键可以定义为开关机按键,也可以自定义为其他功能,屏幕主要功能介绍如下图: 五. 产品设计 (1)该屏幕采用矩形设计,4个角并没有倒角,小编还是喜欢有倒角的设计,毕竟直角的设计还有存在划手的风险,有的时候不小心拿到直角处还是很不舒服的。 安装到树莓派上与树莓派有些偏离,看着不是很舒服,如下图: 屏幕的三个角上有定位孔,右上的定位孔并未与树莓派的定位孔重合,左侧的两个孔 还被下面的USB接口和RJ45接口挡住了,所以这三个定位孔很可能没有什么用处。 如下图: PCB采用沉金工艺,在短边采用V-cut拼板方式,有些毛刺有些划手。 屏幕下方的四个按键没有安装,需要格外购买自行安装,最左侧的按键再焊接后有被下方的USB接口的金属外壳短接的风险,如下图: 屏幕的两个连接器已经焊接,但是屏幕只是用了部分扩展插针,在安装屏幕后,剩下的未连接的插针也很难再被连接使用了,如下图: 连接到屏幕上的扩展插针又通过另外一个连接器进行扩展,但是安装起来似乎不是很方便,如下图: 六. 产品使用 将屏幕安装到树莓派上,如下图: 屏幕需要安装相应的控制程序,可以根据Adaruit官方提供的方法安装相关的脚本,适合已经搭好树莓派系统的情况,再为了使用该屏幕而安装脚本。 另外Adaruit官方还提供了定制的镜像文件供下载,如下图: 官方提供了两个版本的镜像,一个是完全版的需要8G的内存卡,另外一个是轻量版的,只需要2G的内存卡,这一点还是很人性化的。 小编为了方便下载了带有脚本的镜像并安装到了树莓派中,接下来上电启动,树莓派进入系统显示在桌面上,如下图: [!--empirenews.page--] 启动后的屏幕显示了树莓派的桌面,但是由于屏幕过小,任务栏上的很多图标有些重叠发生了重叠,用手指触摸很容易误触,如下图: 值得肯定的是这是一块电容屏,触摸很灵敏。 接下来我们连接网络,就可以上网了,下面我们访问21ic网站,如下图: 管方还介绍了使用mplayer播放视频,鉴于这款屏的分辨率只有320x240,小编不打算使这项功能了。 值得一提的是这款屏提供了背光调节功能,如下图: 在屏幕的背面有一个未焊接的电阻#18,当我们将一个0欧电阻焊接到这个位置后我们就可以通过树莓派的GPIO18来控制屏幕的亮度了,官方提供的信息显示,这是一个不错的设置,可以从0关闭到1023最亮调节。 对于屏幕下方的按键可以自由定义,设置任何你想设置的功能,官方提供了完整的开发方式。 最后官方提供了触摸屏的手势开发,官方提供了已有的手势符号,如下图: 小编以为这才是这块屏最好玩的地方,感兴趣的网友可以下载相关的代码研究一下。 七. 其他资料 官网提供了触摸屏的原理图,如下图: 以及屏幕的机械尺寸,如下图: 八. 总结及展望 这款树莓派的触摸屏,做工一般,尺寸偏小,分辨率偏低,显示内容非常有限,显示效果也一般,想畅快的玩树莓派还是建议选用显示器或者更大的触摸屏。 但是他也不是一无是处,因为他小所以他很便携,可以随意的带到任何地方,对于喜欢使用SSH登录树莓派的朋友,用这款屏显示一些重要信息还是很合适的。 最重要的是这款屏的手势识别,对于有兴趣的朋友一定是最值得学习的地方。 九. 官方信息 树莓派官网:www.raspberrypi.org Adafruit官网:https://www.adafruit.com/  

    时间:2017-12-25 关键词: 2.8 触摸屏 树莓派 adafruit 拓展版 raspberrypi dsi接口

  • 让WIFI开发变得更简单—Adafruit ESP8266开发板上手

    让WIFI开发变得更简单—Adafruit ESP8266开发板上手

    大佬们又开始在乌镇吃饭了,物(互)联网又要热闹了! 万能的粗粮也推出了ESP32模块,只要15元RMB一块,物联网估计又要火一波! 联网的需求越来越大,以太网和WIFI都可以满足联网的需要,不过对于物联网设备来说,WIFI连接似乎更方便一点,便携是一个必然要考虑的因素。 Adafruit Feather HUZZAH ESP8266开发板隶属Feather系列中的一员,除了轻便、小巧之外,开发板本身就是一个“一揽子”解决方案:提供WIFI连接功能、USB连接及锂电池供电、充电功能,可以直接集成到已有的产品中,为开发节省不少时间我开销。 看上去很美,按Adafruit自己的说法,让我们一起来嗨! 先认识下Adafruit ESP8266长啥样。 买来的就是个散包,没有包装盒。厂商有点抠,这下装13的话,效果估计要打个八折。图上的东西,一个ESP8266模块,俩排针,就用一个防静电袋装着,逼格稍嫌不够! 开发板正面图,主要的器件都能看得很清楚。一个安信可的ESP8266模块,这是整个开发板的核心,提供WIFI连接功能。上下两排GPIO接口,提供了基本的GPIO功能,这些接口可以复用作SPI/I2C/UART接口,与外部传感器等进行交互。上图中最右边是USB接口,可以兼做电源及UART接口。与接口紧邻的靠下的就是锂电池接口,用来连接3.7V规格的锂电池。锂电池接口上面是CP2104串口芯片及复位按钮。 开发板背面,看到Feather标志了,该开发板是Feather系列的一员,意味着轻巧、便携,能带你飞! 来个特写,近距离欣赏ESP8266模块和锂电池接口。 为了增强开发板的可便携性,开发板除了提供USB口供电之外,还提供了一个3.7V的锂电池接口,内置充电功能。当同时连接了锂电池和USB接口的话,开发板会自动切换到USB口取电。 开发板的主要特性如下 小巧,三围大小仅为51mmX23mmX8mm,重量仅6g 板载ESP8266模块,最高工作频率@80MHz,3.3V供电 4MB FLASH存储 3.3V电压调节器,最高支持峰值500mA电流输出 板载CP2104串口转换器,最高支持921600波特率 固件下载后支持自动复位 9个GPIO口,可复用作I2C、SPI等接口 1个模拟输入,最高支持1.0V 内置锂电池充电接口,提供约100mA充电电流 3个LED指示灯,可用作一般演示用,也可以用来指示特定的操作模式,如bootloader模式 4个安装孔 复位按键 市面上基于ESP8266模块的开发板甚多,不过提供了锂电池接口的倒不多见。Adafruit的这一款ESP8266开发板虽然只添加了一个小小的接口,但是该开发板的用途却是极大得到了扩展,不必再担心到哪里去找USB接口来给开发板供电了。 接下来准备上电。不过有一点要提醒大家,开发板上的GPIO口默认只引出了焊盘,如果要测试GPIO口功能的话,先得将随开发板一起提供的排针焊接好,这应该难不倒我们电子工程师,如果纯软件类的工程师估计要小小头疼一下,不过应该也不是什么大问题。 准备一根USB A转USB micro的数据线,一端与PC连接,另一端与开发板的USB口连接,可以看到开发板有灯闪烁,然后就没有反应了。 不用担心板子有问题,默认的出厂固件提供的是WIFI访问功能,没有对LED进行配置,打开手机的WIFI配置项,会看到里面多出一个WIFI热点,如下 ESP_XXXXXX设备即咱们的开发板提供的SSID名称,连接到该设备后如下 可以看到手机已连接上开发板,获取到的IP地址为192.168.4.2。嗯,WIFI工作正常,接下来,就是作为开发工程师的你大显身手的时候了。 ESP8266包含丰富的开发环境支持,乐鑫官方的ESP-IDF可以用来对开发板进行软件开发;这种方式比较底层,开发环境的配置及使用相对来说复杂一点。也可以使用ARDUINO来进行软件开发,这种方式相对来说要简单一点。另外一些脚本语言如Python、Lua等也可以用来进行软件开发。 咱们从Arduino开始。 Arduino原生并不支持ESP8266,因此,需要安装三方的支持包,主要包括xtensa专用的编译器及相关的库文件。 在Arduino的Preferences对话框中添加附加的URLS,如下 添加的URL如下: http://arduino.esp8266.com/stable/package_esp8266com_index.json 然后打开Arduino的Boards Manager对话框, 在对话框里选择安装ESP8266社区版,需要注意的是这个安装过程比较耗时,因为其中一个软件包大约有146MB,在Arduino下安装可能需要好几个小时。最佳的办法是直接打开上面提到的JSON文件,从里面抠出那个146MB的软件包,使用专用的下载软件下载然后放到用户目录的staging目录下,Arduino会自动发现该软件包,从而跳过下载过程,节省安装时间。[!--empirenews.page--] 不过说实话,Arduino这个IDE用着实在蛋疼!所以还是使用更好用的VSCODE来进行吧,使用VSCODE来开发ARDUINO程序的话,先要安装VSCODE-ARDUINO这个扩展(插件),安装过程就不详述了,参考官方说明即可。 不过VSCODE也蛋疼,新版的VSCODE默认对C/CPP的头文件处理模式使用的不再是Tag Parser,而是所谓的Default模式。这样智能感知及头文件搜寻就有点小问题,所以在VSCODE中还要对USER SETTINGS文件作如下修改 即将默认的模式改为Tag Parser模式。 万事俱备,只差一段代码了。 这段代码就是点个灯,有点简单,不过作为测试VSCODE配置是否正确而言足够了。 按组合键CTRL+ALT+U,将编译并上传代码到开发板,然后看到开发板上的红色LED开始闪烁。 补充一点,在VSCODE中选择开发板类型及串口参数,参考下图 接下来再写一段简单的代码测试WIFI功能,将开发板设置成STATION模式,从上级路由中获取IP地址,通过串口显示 使用WIFI对象来配置开发板,只需要两个参数,一个是SSID,另一个是WPA密码,修改这两个值,与实际的路由器匹配即可。 注意下面的输出窗口,这是使用ESPTOOL上传代码到开发板的过程。 接下打开串口输出窗口,可以看到输出的信息如下 看到开发板已获取到了实际的IP地址。 注意前面的乱码,ESP8266默认上电后的串口波特率为921600,实际配置的工作参数为115200,所以就乱了。 光链接WIFI也没啥,总得用来干点实事!继续来点灯,这次的版本是网络版的点灯,附带介绍下aREST库,这个库结合WIFI功能,可以实现通过网络来控制或读取开发板上的信息。 需要包含如下头文件 UI部分的代码如下 这里设置了UI的标题,控制LED灯的按钮及两个显示文本的组件,并不复杂。 代码运行效果如下 界面虽称不上美观,但也够用了。 不过在ESP8266上用的话,注意这个ON/OFF的值是反的,即写入1是来灯,写入0则是亮灯。D3(RED)的原理图参考如下 这是本地网络的通信,如果要连接上Internet,在任何地点实现远程访问及控制,可以使用另外一个称为PubSubClient的库来实现,有兴趣的童鞋可以去看看这个库的特性。 前面介绍过,ESP8266还可以支持Python及Lua,接下来看看如何使用这些流行的脚本语言来控制ESP8266。 从附录给出的链接下载python固件,使用ESPTOOL烧录到开发板,如下 使用串口通信软件如putty连接到开发板,就可以与开发板实现交互了,如下图 要获取简单的用法,可以在命令提示符下输入help()获取得联机帮助,下面的代码演示了简单的WIFI热点扫描操作及结果 可以看到扫描出了附近可用的WIFI热点,接下来可以使用连接命令来连接,进而实现其它网络操作。 上图中还测试了交互式计算功能,计算2的1024次方的结果,运算速度还不错。 LUA操作与PYTHON操作基本类似,不过需要使用LUA固件,然后通过串口与开发板实现交互,这里就不赘述了。 总体来说,ESP8266还是很有吸引力的。一是开发板体积小巧,尤其适用在现有的创意中添加网络支持功能;基于ARDUINO的开发,也降低了准入门槛,菜鸟只需要花费很少的时间熟悉一下相关的API,就可以很快集成网络通信功能;PYTHON及LUA语言的支持,进一步拓宽了使用面,特别是对于那些不熟悉C语言的用户来说,真是一大福音! 参考资源: ESP8266: https://www.adafruit.com/product/2821 LUA ESP8266: http://nodemcu.com/index_en.html PYTHON ESP8266: https://micropython.org/download#esp8266

    时间:2017-12-19 关键词: Wi-Fi MCU esp8266 adafruit feather huzz

  • 用Python来做嵌入式开发——Adafruit PyBoard评测

    用Python来做嵌入式开发——Adafruit PyBoard评测

    一.前言 近些年来Python非常流行,Python是一种面向对象的解释型计算机程序设计语言,Python语法简洁清晰,易读性以及可扩展性,Python具有丰富和强大的库,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起,常被称为胶水语言,可以应用在图形处理,数学处理,Web编程,多媒体应用等领域。 二.定位 在过去的这么长时间里,在嵌入式开发领域中开发语言以C/C++为主,如今基于Python的MicroPython已经涉入到该领域中,MicroPython是一位叫Damien George的工程师,基于ANSI C(C语言标准),然后在语法上又遵循了Python的规范,主要是为了能在嵌入式硬件上(这里特指微控制器级别)更易于的实现对底层的操作,MicroPython官方提供的硬件开发板叫PyBoard,除了官方提供的开发板外,还有一些嵌入式硬件也被成功移植了MicroPython,例如:Esp8266,WiPy,Espruino Pico,STM32F4 Discovery等。 三.开箱 今天小编拿到了Adafruit生产的PyBoard,Adafruit的PyBoard与官方的板子完全相同。 这块小板子被放在了一个小巧的黑色包装盒中,如下图: 盒子做的小巧精致 打开小盒子就可以看到这块小巧的PyBoard和一张MicroPython的贴纸,如下图: PyBoard板子正面,如下图: 在PyBoard板子正面主芯片旁边也有一个MicroPython的logo PyBoard板子反面如下图: PyBoard板子背面贴有一张条形码,条形码底部标有Made in Germany,条形码下方是一个较大的MicroPython的logo,还有PYBv1.1和MicroPython的网址。 整个PyBoard板子十分小巧,看到这块板子和价格觉得这块板子着实不便宜,好在这是独一份的MicroPython,板子做的也比较精致。 四.产品功能 MicroPython官方提供了详细的功能介绍和引脚分配图,如下图: 图中以不同的颜色和标识区分了PyBoard板子的各个接口和各个引脚的不同功能,图中表达的内容清晰明了值得学习。 五.产品设计 1.结构设计 PyBoard板子采用了圆角矩形设计,并在左下角和右上角设计了两个圆孔的耳朵,看起来小巧可爱,板子的切割十分精细,圆角过度非常圆润顺滑,板子使用邮票孔拼板,分板后邮票孔比较光滑不会划手,总体的设计和做工都很好。 PyBoard板子的器件和接口布置如下图: 板子以STM32F405RG为核心,配合1个加速度计,2个机械按键,4个LED以及一个MicroSD卡槽,使用MicroUSB接口为板子供电并与PC通信。 核心MCU为 STM32F405 大家在熟悉不过了,这里就不介绍了,这里使用的加速度计是MMA7660,该器件是NXP的3-Axis Orientation/Motion Detection Sensor,测量范围±1.5g,采用I2C通信接口,现在的器件集成度都非常高,如果这里设计一款带有陀螺仪的6轴传感器,板子就可以做更多的设计和设想。 六.产品使用 将这块PyBoard通过USB线连接到电脑,电脑(Win7)会显示出一个BYBFLASH的盘符,如下图: 打开该盘符后可以看到四个文件,如下图: boot.py是板子的启动文件,main.py是用户文件,pybcdc.inf是USB驱动,README是板子的简单说明。 PyBoard板子连接到电脑的同时,设备管理器中也会出现一个设备,如下图: 该设备需要安装驱动程序,就是上面提到的pybcdc.inf,安装好驱动程序,板子连接正常,如下图: 显示连接COM34 这是我们打开串口软件就可以通信了,小编使用的是PuTTY,如下图: 选择COM34,波特率默认为9600,打开后会显示板子版本信息和help信息,如下图: [!--empirenews.page--] 输入help()命令后会显示,PyBoard的基本操作命令,如下图: 在PyBoard上安装了4个LED分别为红绿黄蓝,原理图如下图: 在help中已经介绍完了LED的控制方法,通过pyb.LED()控制 pyb.LED(n) n代表LED的编号,1代表红色LED,2代表绿色LED,3代表黄色LED,4代表蓝色LED。 pyb.LED(n).on()点亮LED pyb.LED(n).off()关闭LED pyb.LED(n).toggle()翻转LED pyb.LED(n).intensity([value])这里可以设置LED的亮度,value取值范围是0-255,0为关,255位最亮 接下来我们将4个led全部点亮,如下图: 点亮后如下图: 原理图如下: 红绿蓝LED,亮度很高,相比之下黄色LED稍微弱一点,从原理图来看,蓝色LED的限流电阻偏小,猜测是为了将亮度调整的相近,但是结果是黄色的LED似乎略有些暗。 其实小编倒是有别的想法,现在使用RGB LED的越来越多了,其实RGB LED就相当于三颗独立的LED封装到一起了,这样封装小,更适合这样比较紧凑的板子。并且RGB LED还可以设计出更多的颜色,增加可玩性。 MicroPython脚本语言最大的优点就是,输入命令后马上就可以看到效果,比我们最熟悉的Arduino更方便更高效,因为少了编译,下载的步骤。因为Python本来就是解释型语言,MicroPython的命令也比较简单,容易理解,容易使用,可以说更容易上手。 接下来我们再试着读取加速度传感器的值,如下图: 总体来讲使用非常方便。 如果将MicroSD卡插入上电,PYBoard会默认从SD卡启动来替代原本从MCU的ROM中启动。但是前提是需要将原来的的boot.py和main.py这两个文件拷贝到MicroSD卡中否则不能运行。 如果我们想要让板子上电后就执行板子内的程序这我们就需要在main.py这个文件中编写我们想要的内容,小编使用Notepad++编辑文件,如下图: import pyb 代表使用pyb模块,这个模块包含了控制开发板的所有函数和类,接下来4行是设置LED的不同的亮度,编辑完成后保存,在保存时红色的LED是亮的,保存完成后熄灭,退出PYBoard,重新连接开发板,四个LED以不同的亮度亮起来,但是红色和绿色的亮度值已经很低了但是实际亮度依旧非常高,差点把小编的眼睛晃瞎,如下图: PyBoard有三种启动模式 1.标准模式,只有绿色LED灯亮,先执行boot.py文件,然后再执行main.py文件。 2.安全模式,只有橙色LED灯亮,启动时不执行任何脚本程序。 3.恢复文件系统,绿色和橙色LED灯同时亮,将Flash文件系统恢复为出厂数据,然后以安全模式启动。 假若你的文件系统被损坏,可以进入模式3修复它,详细操作步骤在官网有详细介绍。 错误指示 1.假如你看到红色和绿色LED灯交替闪烁,表示Python脚本有错误(main.py),可以通过REPL进行调试修复。 2.假如4个LED灯以较慢的速度循环亮灭,这时出现了非常严重的错误(比如内部出现跑飞了),这种情况下只能通过硬件复位来恢复了。 硬件恢复需要使用ST DFU Se为PYBoard下载固件。 七.其他资料 官方网站上提供了PyBoard的固件,原理图,等文件。另外官网还提供了详细的快速参考手册,教程等文件,如下图: 这些文件详细的介绍了MicroPython和PyBoard,通过这些资料可以快速的入门,唯一不方便的是这些资料是英文的,好在国内的一些论坛也有翻译这些资料的,可以供参考。 八.总结及展望 Python本来就是非常容易入门的语言,同时也是应用广泛的语言,MicroPython将这用容易学习和使用的语言带到了嵌入式开发中,可以直接操作硬件,并且不需要编译和下载,可以快速的看到程序的结果,这是非常好的体验。PyBoard精致小巧是一块漂亮的开发板,可以方便的学习和开发,另外MicroPython也支持更多的平台,例如:STM32F4 Discovery Board,NUCLEO-F401RE Board,NUCLEO-F767ZI Board,ESP8266,WiPy等,以上的这些开发板都可以支持MicroPython,在开发板内刷上固件就可以使用了。MicroPython带来了全新的开发体验,有兴趣的同学可以试试。 九.官方资料 官网:http://micropython.org/

    时间:2017-09-14 关键词: MCU adafruit python pyboard stm32f405

  • ESP8266也可以用Lua脚本玩——NodeMCU ESP8266评测

    ESP8266也可以用Lua脚本玩——NodeMCU ESP8266评测

    1.1 简介 随着十三五规划“互联网+”的提出,物联网行业百花齐放百家争鸣,如今物联网公司如雨后春笋一般遍地开花。那么当然这里就要用到无线接入了,其中WIFI形式接入是目前的主流趋势。这里就不得不提的一款WIFI模块产品ESP8266,由于性价比极具诱惑,且童叟无欺,老少皆宜,十分受到开发者的喜爱。 那么今天呢,我就给大家介绍一款有Adafruit推出的基于ESP8266的WIFI开发板,说白了就是把ESP8266模块通过一个差不多大小的PCB板把端口接出来并实现了最小系统功能。下图就是纯粹的ESP8266模组。由于小巧,设计合理,可以很容易嵌入到你的开发板中,不过如果作为开发板使用,还是需要外部焊接一些基础电路的,比如复位电路,指示灯作用的LED等。 1.2 初见 收到之后,简单的塑料袋包装,取出东西展示一下。如下图,主板一块,排针两条。给的排针可以自己根据使用情况焊接。考虑的很周到。 如果你把排针全部焊接,通常如下图样式。其中两边对称的焊接向下,方便插入面包板或接入自己的电路板。顶端的6针焊接向上,方便直接连接串口调试或学习。 另外套件仅仅这些,如果需要跟电脑通信还需要自己准备一条串口线。官方建议的学习方式如下图所示: 其中串口线和面包板自己准备。当然如果你有其他的USB转串口设备也是可以的,比如支持串口的单片机开发板上的编程器。有了初步的认识我们下面就进入板载资源分析。 1.3 板上资源 如图所示,该开发板的主控MSP430FR2311就是开发板正中心那颗小拇指指甲盖大小的芯片。提供的可被用户编程把玩的板载外设有:一个用户按键,两枚LED灯,一枚光敏元件。根据之前介绍的,大家应该猜测到这枚光敏元件应该就是为跨阻放大器(TIA)演示而设计的。 另外板子还提供了5V电源接口和3.3V电源接口,方便把用户为自己不同电源接口的外设提供电源。 1.4 安装驱动 因为是基于单片机串口的通信,因此你需要一根USB转TTL电平232的转换线就可以了。安装驱动根据你所选的转TTL232设备而定。本人这里刚好手头有一块NUCLEO-F446ZE探索板。上面具备232串口。连接USB转232设备后,在设备管理器可以找到该项目。如下: 我们顺便记下端口号,我的这里端口号为5。根据选用接口转换设备不同,端口号可能不同,串口设备的名字也可能不同。 1.5 DEMO测试 查看官网,我们知道该板子出厂前已经烧录了NODE MCU固件。这里我们需要先了解一下该固件是什么。 Node MCU是一个开源的物联网平台, 它使用Lua脚本语言编程。 该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU包含了可以运行在esp8266Wi-FiSoC芯片之上的固件,以及基于ESP-12模组的硬件。 因此也可以说该模块内已经烧入了可以运行LUA脚本程序的引擎固件。我们需要使用终端来与模块通信,并输入脚本命里,查看执行情况。这里推荐终端程序使用putty,如下图所示。 选择串行通信,并输入端口号,码率设置为9600之后单击Open,将会弹出终端命令行界面,如下图。 此时我们就可以结合NodeMCU的API函数来测试了。 结合端口映射表来确定一下,我们如何操作上面GPIO0对应的LED。我们知道GPIO0是针对的Arduino来说的,根据下表可知,该端口对应NodeMCU里的3。     点亮LED步骤如下: 操作目的操作代码操作结果     由上面的操作步骤我们还可以看得出,#0上的LED是低电平有效。 因此如果想让该LED闪烁起来可以如下操作。 作为一款嵌入式WIFI模块,DEMO测试当然要测WIFI的功能。下面我们测试如何开启模块 WIFI功能,并配置为AP模式。执行完指令查看WIFI列表如下图所示,在列表中出现名字为ESP_FD89E8的热点名称,这就是我们的ESP8266生成的WIFI接入点,对于更多配置的操作我们后面讨论。 [!--empirenews.page--] 1.6 开发环境与编程 前提是你有一个已经刷入了Node MCU固件的ESP8266,如果你手里的是原版的ESP8266,那么怎么刷入该固件呢?接下来给大家介绍一下。首先去NodeMCU的github下载固件(nodemcu-firmware)和刷机工具(ESP8266Flasher.exe)。 NODEMCU官方网站 http://www.nodemcu.com/index_cn.html 固件下载地址 https://github.com/nodemcu/nodemcu-firmware/releases NODEMCU一键烧录软件下载地址 https://github.com/nodemcu/nodemcu-flasher ESP8266模块最小系统接线后,将GPIO0接GND,然后通电,ESP8266进入烧录模式。 打开一键烧录软件 1.设置固件目录 2.设置ESP8266 FLASH信息 3.选择串口,GPIO0拉低后上电,开始烧录 4.烧录完成 这样就完成了固件的刷入,如果你不小心操作失误导致系统不停重启,又找不到好方法解决就可以通过此方法重新刷入系统即可。 那么怎么编写lua脚本呢?NodeMCU提供了编辑工具NodeMCU Studio 2015。 不仅可以编辑lua脚本文件,还可以上传。但是官方提醒我们不要使用这个工具。这里推荐使用ESPLorer。下载地址为http://esp8266.ru/esplorer/ 说明在http://nodemcu.readthedocs.io/en/dev/en/upload/ 这是一个JAVA程序,需要你先按照JAVA运行环境后才可以运行。如下图,打开端口后,会在右边的窗口显示回显信息。 我们在左边窗口可以编辑脚本程序,保存后可以选择下面不同的操作方式。 如上图所示,保存好脚本程序后可以选择运行,这时候ESP8266对应的LED就开始按秒闪烁了。 1.7 小结 这是一个开源,交互式,可编程,低成本,简单,智能,WI-FI硬件。可以像Arduino一样操作硬件IO提供硬件的高级接口,可以将应用开发者从繁复的硬件配置、寄存器操作中解放出来。用交互式Lua脚本,像arduino一样编写硬件代码! 基于乐鑫esp8266的NodeMCU开发板,具有GPIO、PWM、I2C、1-Wire、ADC等功能,结合NodeMCU 固件为您的原型开发提供最快速的途径。并与丰富的API接口函数,简单好用。另外强烈推荐使用ESPLorer作为编写源代码和操作软件,如果想简单呢,就直接用putty.exe千万别用NodeMCU Studio 2015。 一不小心给你弄死了,然后把板子固件死机后,比如不停的重启,就重新烧录固件bin文件进去,刷机后自动恢复。 对于WIFI的操作请查看相关的API函数。 如果有其他问题可以在论坛发帖或在评测后留言。 1.8 资源下载 nodeMcu API说明 官方的使用说明和例程 本文系21ic原创,未经许可禁止转载

    时间:2016-08-01 关键词: esp8266 adafruit 拓展版 breakout huzzah nodemcu

发布文章

技术子站

更多

项目外包