深度学习模型太大?这家公司直接跑在了树莓派上

深度学习当前面临的一大热点问题是很多深度学习的模型太大而不方便在移动设备和嵌入式设备上使用。现在常见的模型比如图像分类模型基本都在500兆以上,自然语言处理的一些模型例如语言模型很多都在1G以上,机器翻译的模型也都是500兆以上。

而一个手机或者潜入式设备要加载一个500兆以上的模型基本不太现实,因此当前深度学习面临的一大挑战就是如何把大模型变成小模型。因为移动设备不仅仅是内存或者存储空间的限制,更多是因为能耗的限制,不允许我们用太大的模型。

2017年2月2日,位于美国西雅图的 AI 创业公司 XNOR.AI 宣布获得来自Madrona Venture Group和艾伦人工智能研究所(Allen Institute for Artificial Intelligence)等机构的260万美元的种子融资。XNOR.AI 利用二值化神经网络等技术对深度学习网络进行压缩,致力于开发有效地在移动端或嵌入式设备上运行的深度学习算法。

值得注意的是,微软联合创始人Paul Allen个人也参与了XNOR.AI的种子轮投资。跑的比香港记者还快的探长对XNOR.AI联合创始人兼CTO Mohammad Rastegari 进行了专访,与他探讨了深度学习的前沿问题。

二值化神经网络,就是所有的权值不用浮点数表达了,就是一个二进制的数,要么是+1要么是-1,用二进制的方式来表达,这样原来一个32 bit权值现在只需要一个bit来表达,从而大大降低这个模型的尺寸。

2016 年 3 月,Mohammad Rastegari 等人在ECCV论文(XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks)中首次提出了 XNOR-Net 的概念。

这篇论文旨在利用二值化操作寻找到最优的简化网络,并分别介绍了两种有效的网络:Binary-Weight-Networks 和 XNOR-Networks。Binary-Weight-Networks 是对 CNN 中所有的权重做近似二值化,可以节省 32 倍的存储空间。而且,由于权重被二值化,卷积过程只剩加减算法,不再包括乘法运算,可以提高约两倍的运算速度,这促使 CNN 可以在不牺牲准确率的情况下在小存储设备上使用,包括便携式设备。

XNOR-Networks 算法则是对 CNN 中所有的权重和输入同时做近似二值化,如果卷积运算中的所有操作数都是二进制的,那么两个二进制向量的点乘就可以等同于同或运算和位运算。而这些操作天然就被CPU等通用计算设备支持,所以二值化神经网络能够跑在普通的CPU和更便宜的ARM芯片甚至是树莓派等设备上。

此外,如上图所示,在节省了几十倍空间和几十倍速度提升的情况下,Binary-Weight-Network和XNOR-Network的准确率精度下降并不显著。

强悍的团队

XNOR.AI团队CEO Ali Farhadi是华盛顿大学计算机系教授,同时也是艾伦人工智能研究所的计算机视觉方向的负责人,他在计算机视觉领域积累深厚,同时是非常惊艳的实时物体检测框架YONO的主要贡献者,“YOLO”系统在2016年CVPR会议上的现场展示一度惊艳全场。

(YOLO的在CVPR 2016的现场演示 )

XNOR.AI的CTO Mohammad Rastegari是艾伦人工智能研究所研究科学家,也在计算机视觉领域有接近十年的研究经历。

(xnor.ai CTO Mohammad Rastegari)

XNOR.AI团队首次让二值神经网络在ImageNet上面完了实验,在自主搭建的轻型神经网络框架 DarkNet 中实现了在 CPU 上 58 倍速度的提升,这意味着很多深度学习算法可以在嵌入式设备上实时的运行。

XNOR.AI团队还把 “YOLO”系统 的二值化版本在 iPhone 上面做到了实时探测,也成为实时检测的一大亮点。

事实上,团队还曾将 XNOR-Net 部署在价值 5 美元的 Raspberry Pi Zero 上,通过连接一个摄像头实现了实时视频分析,他们官方视频里展示出的实时检测分析效果十分引人注意,强烈的震撼了小探的小心脏。

如果在类似于 Raspberry Pi Zero 这样的移动设备上都能做到实时物体检测,这项技术在其他领域中也潜藏着巨大的商业价值。

XNOR.AI的愿景是普适人工智能

由于他们的二值化神经网络,除了带来的数十倍的内存减少和计算提升,二值化操作天然就被CPU等通用计算设备支持,所以二值化神经网络能够在普通的CPU和更便宜的ARM芯片甚至是树莓派等设备,Mohammad还表示他们也在微软的Hololens上实现了他们的算法。

在采访中,Mohammad说道,他们的深度学习技术能够用在计算能力和内存都有限的设备上,XNOR.AI针对的市场是普适计算的场景,他们希望未来所有的智能设备都可以运行他们的深度学习算法。

而CEO Ali Farhadi曾说:“可以设想,未来每个街道拐角,价值5美元的摄像头,都能识别看到的景象,了解正在发生的事情;而我的手表也能真正听懂和处理指令。”

(在手机上实时物体检测)

Mohammad表示物体的实时检测是一个非常难的问题,他们用视频演示了他们的强悍能力,目前不少实时检测都通过将视频流传到云端来做检测,但这一方面带来了延迟问题,另一方面则是带来了隐私问题,但利用他们的算法,实时的物体检测在本地就能完成。

Mohammad也表示这不代表他们只会局限在计算机视觉领域,目前他们能够对主流的深度学习网络比如RNN和CNN进行二值化操作。除了视觉领域,还有自然语言处理都有望实时化操作。

作为成立才一个月的公司,Mohammad还在探索自己的商业模式,但已经有大量厂商和他们联系了,XNOR.AI的愿景是普适人工智能,“AI on every device everywhere”。

转自硅谷密探。

树莓派与Arduino间的通信实践

最近需要在Arduino之间,以及Arduino和上位机(树莓派)之间传输数据,

原有APC220设备虽然可用,使用也方便,但成本太高,不容易批量,遂寻求其他方案。

一、方案选择

根据搜索的结果和前人经验,有如下几种可行方案:

nRF24L01+(RF)

ESP8266(WIFI)

XBee (ZigBee)

ENC28J60(LAN)

W5100,W5500(LAN)

其中,Xbee为最优选,但成本太高。

LAN方案不方便,WIFI方案功耗高,蓝牙方案传输距离短,

故考虑RF方案,成本和效果平衡较好。

nRF24L01+价格便宜(5块左右,做工好带天线的15左右),编程简单,

且存在能同时支持树莓派、Arduino、Linux的RF24库。

Git连接为:https://github.com/TMRh20/RF24.git

便宜的(做工一般的)nRF24L01开发板:

二、接线

1、nRF24L01+引脚图

– 1:地

– 2:3.3V(切不可接5V,烧片)

– 3:CE(RF读写控制引脚)

– 4:CSN(选片引脚)

– 5:SCK(SPI时钟)

– 6:MOSI(SPI主出从入)

– 7:MISO(SPI主入从出)

– 8:IRQ(外部中断)

2、接线方法

编号 nRF24L01 Arduino Mega Arduino UNO Rpi(物理管脚) 1 GND 9 2 VCC 1 3 CE 7(可自定义) 7(可自定义) 15(GPIO22) 4 CSN 8(可自定义) 8(可自定义) 24(SPI0CS1) 5 SCK 52 13 23 6 MOSI 51 11 19 7 MISO 53 12 21 8 IRQ – – –

接线示意图:

Arduino UNO

Arduino Mega

RaspberryPi3

三、代码 & 运行

RF24库中自带的GettingStarted例子非常方便,其代码包含发送端和接收端两种类型,

默认为接受模式,输入T时切换为发送,输入R则切为接受模式,并有简单的超时判断。

为了易于理解,可简单修正代码,让接收端返回一自增数字。

1、 Arduino

1)RF24库安装

从https://github.com/TMRh20/RF24.git下载RF24后,

将其复制到Arduino安装目录下的libraries目录下,启动ArduinoIDE后,从例子中选择RF24->GettingStarted。

2)代码修改

发送端不必修改,直接编译上传即可。(注意UNO和Mega的选择和串口选择)

接收端将代码中的radioNumber从默认的0修改为1。如下:

bool radioNumber = 0; (自身为2Node,发送给1Node) -> bool radioNumber = 1;(自身为1Node,发送给2Node)

简言之,1Node为接收端,2Node为发送端。

建议:原代码中的got_time不易观察理解,

可将接收端中的got_time发送前赋值为一静态可增计数值。

3)运行

发送端启动后,输入T,使其进入发送模式。

接受端启动即可,无需输入R。(默认为R接收模式)

如上述配置接线正常,可在Serial Monitor中看到发送方和接收方的输出,大致如下:

发送方图(静态自增变量):

2、 树莓派(RaspberryPi)

本文中使用的树莓派为 16年新发布的RPi3 B型,其管脚如下:

1)RF库安装

将RF24库复制到树莓派(或通过git直接获取)。进入RF24目录后执行如下命令,进行编译和安装(选择SPI方式)

./configure –driver=SPIDEV sudo make install -B

2) 修改系统配置

修改/etc/modprobe.d/raspi-blacklist.conf,如果其中存在 blacklist spi-bcm2708,将其注释。 修改/etc/modules文件,在其中追加一行,开启SPI。 spidev

reboot重启树莓派后,/dev下会新增spidev0.0和spidev0.1两个设备文件。

3)代码修改

修改RF24/example_linux/GettingStarted.cpp文件,

同上面的Arduino一样,发送端不必修改,

接收端将radioNumber从默认的0修改为1,并建议吧回送的时戳数据改为自增数字。

在当前目录下执行make后,生成GettingStarted的二进制文件。

4)运行

使用sudo ./ GettingStarted执行,并输入0进入接收模式。

如Arduino的发送端配置、运行正常,则正常发送回应包。大致如下(自增变量版):

四、注意&体会

便宜版本的nRF24L01效果一般,很容易受到干扰。带天线的会好些,真做项目不可图便宜。

接线要准确,SPI要理解下原理。CE、CSN其实是可以任意指定的,只是要修改下RF24的初始化代码。

五、RH24例子代码简单说明

以下是RH24(TMRh20)自带的Arduino例子,简单说明一下,

树莓派上为C语言实现的版本,变量、语法略有区别,但逻辑是基本一致的。

变量定义

bool radioNumber = 1; // RF节点名称决定Flag /* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 */ // 指定CE用GPIO7,CSN用GPIO8,需要和接线一致 // 如接线不采用7,8,代码这里需要修改。 RF24 radio(7, 8); byte addresses[][6] = {“1Node”, “2Node”}; // 两个节点名 bool role = 0; // 发送&接收模式Flag

初始化函数

void setup() { Serial.begin(115200); Serial.println(F(“RF24/examples/GettingStarted”)); Serial.println(F(“*** PRESS ‘T’ to begin transmitting to the other node”)); radio.begin(); radio.setPALevel(RF24_PA_LOW); // Open a writing and reading pipe on each radio, with opposite addresses if(radioNumber){ radio.openWritingPipe(addresses[1]); radio.openReadingPipe(1,addresses[0]); }else{ radio.openWritingPipe(addresses[0]); radio.openReadingPipe(1,addresses[1]); } // 默认为监听模式,开始监听 radio.startListening(); }

执行逻辑

void loop() { /****************** Ping Out Role ***************************/ if (role == 1) { // 发送模式 radio.stopListening(); // 发送数据前要停止监听 Serial.println(F(“Now sending”)); unsigned long start_time = micros(); // 待发送的时戳 // RF24内部会自动处理payload和发送数据不等长的问题 if (!radio.write( &start_time, sizeof(unsigned long) )){ // 发送数据 Serial.println(F(“failed”)); } radio.startListening(); // 数据发送完,需要监听回应数据的到来 unsigned long started_waiting_at = micros(); boolean timeout = false; while ( ! radio.available() ){ // 超时判断 if (micros() – started_waiting_at > 200000 ){ timeout = true; break; } } if ( timeout ){ Serial.println(F(“Failed, response timed out.”)); }else{ // 读数据并显示数据和间隔时间 unsigned long got_time; radio.read( &got_time, sizeof(unsigned long) ); unsigned long end_time = micros(); // Spew it Serial.print(F(“Sent “)); Serial.print(start_time); Serial.print(F(“, Got response “)); Serial.print(got_time); Serial.print(F(“, Round-trip delay “)); Serial.print(end_time-start_time); Serial.println(F(” microseconds”)); } // Try again 1s later delay(1000); } /****************** Pong Back Role ***************************/ if ( role == 0 ) { // 接收模式 static long count = 1; // 自增计数 unsigned long got_time = 0; if( radio.available()){ while (radio.available()) { // 读数据 radio.read( &got_time, sizeof(unsigned long) ); } got_time = count++; // 为便于理解,回送自增计数值 radio.stopListening(); radio.write( &got_time, sizeof(unsigned long) ); // 写回应 radio.startListening(); Serial.print(F(“Sent response “)); Serial.println(got_time); } } /****************** Change Roles via Serial Commands ***************************/ if ( Serial.available() ) { // 发送&接收模式通过串口决定 char c = toupper(Serial.read()); if ( c == ‘T’ && role == 0 ){ // 发送模式 Serial.println(F(“*** CHANGING TO TRANSMIT ROLE — PRESS ‘R’ TO SWITCH BACK”)); role = 1; }else if ( c == ‘R’ && role == 1 ){ //接受模式 Serial.println(F(“*** CHANGING TO RECEIVE ROLE — PRESS ‘T’ TO SWITCH BACK”)); role = 0; radio.startListening(); } } } // Loop

五、参考URL

详细参考(英语):

http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

其他人的成功经验:

http://www.cnblogs.com/hangxin1940/archive/2013/05/01/3053467.html

http://www.cnblogs.com/hangxin1940/archive/2013/05/01/3048315.html

注意:其所使用的RF24库并不相同

转载自 http://blog.csdn.net/ydogg/article/details/53307365

销量破1250万:树莓派成第三大计算平台

树莓派(Raspberry Pi)凭借高度定制化和可玩性,深受科技宅青睐,2012年推出以来全球销量已达1250万块。

这是一个里程碑式的数字,因为作为世界第三大计算机平台的Commodore 64的历史累计销量就是1250万台,而由于Commodore 64早在1993年就已经停产,树莓派从此可以稳坐世界第三了。

前两名?当然是Windows、Mac。

树莓派今年已经进化到第三代,搭载64位A53处理器,支持更多连接,还有更小巧的Pi Zero版本。

树莓派销量破1250万:成世界第三大计算平台

在树莓派的所有型号中,销量最好的是第三代3B版,占比达30%,其次是第二代2B版、第一代B版,均占23%,然后是第一代B+ 15%。

值得一提的是,最新支持无线技术的Zero W版四天就卖了10万块,已经占到总体1%的销量。

树莓派瑞士军刀扩展板教育特惠活动

树莓派瑞士军刀扩展板(SAKS)已经拥有从基础到应用的丰富教程,极其适合学校和教育机构设置实验课程使用。非常欢迎您将它带入课堂、学生社团、创客空间,为此我们推出了以下特惠活动(长期活动)。

优惠1.购买SAKS扩展板,凭有效学生证或教师证可获得9折优惠(每个淘宝帐号仅享有一件的折扣优惠,且对该型号产品仅限使用一次)。

优惠2.一次购买10件以上的SAKS扩展板,可凭有效学生证或教师证等证件,额外获赠一件SAKS扩展板。

注:

1.以上两项优惠不可同时使用。

2.证件验证方式请咨询淘宝店铺卖家。订单收货地址须与证件中学校名称对应,收货人须与持证人名字对应。(中国大陆以外地区可使用转运仓地址)

3.活动的参与仅限订单完成支付之前申请,由卖家修改价格。订单支付之后不再接受优惠申请。

4.具体的优惠和操作方式的解释请以店铺卖家说明为准。

同时我们也很愿意倾听您来自教学方面的效果反馈。在实际教学、应用中,向我们反馈有价值的作品稿件、图片、视频等资料的用户,我们将会给予随机金额的礼金红包!

树莓派+Arduino+TensorFlow搭建图像识别小车

从买第一个Arduino套装开始,我接触机器人有好几年了,但直到最近才开始做完整的课题。期间有两项技能为我打开了新世界的大门:Python和Linux。他们背后,是强大的开源社区。掌握了这两样工具的工具(元工具),你感觉网上遍地是趁手的兵器。上周在公司内部编程培训时,有一句话深得我心:我们是软件工程师,不是程序员。我们的工作不是写程序,而是合理使用工具解决问题。在Google,如果你觉得自己不得不从零开始写某项功能,只是你还没有找到相应的工具罢了。在开源社区更是如此。

这是一个遥控小车,通过红外遥控或无线键盘可以控制小车的行动和摄像头的角度。TensorFlow实时监测摄像头拍摄到的画面,语音读出它识别出的物体。所有代码都放在我的GitHub上。

这个想法不是我的原创,来自Lukas Biewald去年九月写的这篇博客。核心部分,TensorFlow识别摄像头图像并语音输出,是我司人工智能工程师Pete Warden的开源工作。和原博客不同的是,制作过程中我加入了Arduino作为机械总控,也了解了Arduino和树莓派对话的方法(串口通信)。期间用到了许多有用的技能和工具,在这里整理一下,欢迎同好们留言交流!

整个课题在命令行环境完成,没有图形界面。如果你不懂Linux系统,可能有些吃力。但是,你都开始玩机器人了,怎么能不学Linux呢?我是通过《鸟叔的Linux私房菜》自学Linux的,后来又尝试从源代码搭建Linux,终于克服在Windows系统环境长大产生的对命令行的抗拒心理。相信我,克服这个障碍,你将打开新世界的大门。何况,用命令行工作才显得更酷更极客,不是吗?除了Linux,你还要懂C++和Python来完成这个课题。

另外,这篇文章主要介绍电子部分,不讲机械和美工。如你看到的,这个小车丑破了我的审美底线,我没花心思在外观上。我希望以后做一些兼具美学和功能的电子课题,或许会和设计师朋友们合作!

一、树莓派

首先,你需要一个最新款的Raspberry Pi,安装好定制的Linux系统,连上无线网。你还需要一个官配摄像头,并在树莓派中设置为可用。你可以将树莓派通过HDMI连接到显示器,但更方便的做法是ssh远程登录,这样你就不用在调试过程中反复地把树莓派从小车上拔线、取下、连屏幕、然后安装回小车了,你可以实时远程修改小车的内核。甚至,我的Arduino程序也是通过树莓派编写、上传、通信的,于是也免去了电脑连接Arduino的步骤,让一切更流畅无缝。

树莓派的Linux系统支持图形桌面,你可以使用RealVNC(用于Windows)或TightVNC(用于Mac)远程登录图形桌面。(这个课题里不需要)

二、TensorFlow

这是课题的核心部分,反而操作起来最简单,因为一切都在这里写清楚了,按部就班就行。运行代码在这里。

注意:这里用了训练好的模型,即TensorFlow中预先给定了训练好的参数集,训练图片库是ImageNet。也就是说,小车识别出的物体只能是图片库里包含的labels,也没有“学习”的过程。

三、小车

小车套件(robot chassis)很多,选你喜欢的一款。标准的套件包括一个基座,两组马达+轮子,一个万向轮,一个电池盒。这个课题不需要四驱,而且之后要用到的马达控制器可能只支持两个马达。我用的是张尧姐送给我的第一个DIY套件:一个戳了很多洞的木板和3D打印出来的轮子和连接部件。这个恐怕是萝卜太辣最早的套件,来自硅谷的创客空间。现在,萝卜太辣已经是国内机器人教育的领军公司,他们正式出品的“起源”套件已非常精致完善,线上也有成熟的教学资源。这个课题里用到的舵机和金属连接部件都来自尧姐送给我的第二个套件——“起源”套件。但从感情上来讲,那套粗糙的木板套件让我更亲近,符合“用最简单的材料实现原型”的理念。

电源:树莓派需要5V、2A电源,放在小车上的话需要一个电流足够大的充电宝。连接树莓派和Arduino的连接线同时也为Arduino供电。但是,马达我用了外部电源(电池盒)。你会发现即使没有外部电源,充电宝依然可以带动马达(尽管很慢)。但是,好的习惯是机械部分独立供电;逻辑电路部分由充电宝提供。

下一步,操控小车。这里有两个方案,第一个不需要Arduino。我使用的是第二个。

3.1:树莓派作为机械总控

我认为单片机的精髓,不是尺寸小,而是丰富的GPIO(General Purpose Input-Output),它们是程序与外部世界对话的窗口。你看到的各种电子部件、探头、焊接、面包板,都是在和GPIO打交道。你需要了解基本的电路知识,也需要知道它们在单片机上的排布。树莓派有一个非常好用的GPIO Python库:gpiozero,使用方法一目了然。

通常用四个端口控制马达,分别连接两个马达的正负级,通过每个马达的正向/逆向旋转来实现小车的前进/后退/转向。实现双向电流的标准电路模型是H桥接。你可以选购一款最基本的H-bridge模块。

因为我手头没有H桥接,所以这个方案我没有实现。

3.2:Arduino作为机械总控

我没有H桥接,但有一个用于Arduino的Motor stacking shield,即Arduino上的H桥接。于是我干脆用Arduino负责机械(马达+舵机),相当于身体;树莓派只负责图像识别,相当于大脑。

Arduino不是Linux系统,不能直接ssh进去写程序,需要在外写好后编译上传。我用数据线连接了树莓派和Arduino,在树莓派上写好程序后上传。我发现一个非常好用的命令行IDE:PlatformIO(也有很棒的图形界面编辑器)。Linux上的安装过程基于Python 2.7。你需要一些初始化,如果像我一样是Arduino Uno主板,输入以下命令即可:

pio init -b uno

Arduino的C++源代码在这里。进入这个文件夹后,输入以下命令即可上传:

pio run –target upload

后来我发现PlatformIO对于Arduino主板好像不支持C++11,如果你有这个需要,可以考虑inotool。

四,无线遥控

同样有两个方案:无线键盘,红外遥控。两个方案我都实现了。

4.1:无线键盘

如果你在上一步用了3.1,无线键盘操控模块就可以直接嵌入到机械操控代码中(我没有实现)。如果你在上一步用了3.2,那么需要在树莓派上将按键操作转为机械控制信号(文本形式),通过串口通信(Serial Port)操控Arduino。python代码在这里,用到了我自己写的库,用来检测键盘按键。这个库将单次按键匹配到前进/后退/转/停止等行为;但我希望实现的是长按键前进/后退/转,不按键时停止。但我始终没有找到现成的库(Update:据说在PyGame里有)。后来我试着通过背景线程(threading)和系统延时的方法写了一个库,但效果不太理想,系统延时和程序运行时间带来的误差总是匹配不好,就放弃了。现在代码里用的是单次按键行动/停止的方案。如果读者有好的库,请推荐!

有一点要注意,使用串口通信前需要disable login(既然你已经ssh远程登录了),这篇解释比较清楚。

4.2:红外遥控

老婆催我看电影,红外遥控的原理就不介绍了。红外的长按返回的是一个单独的值(REPEAT),这点就可以让我很容易实现“长按-车动,不按-车停”。此外,红外遥控的代码直接写在Arduino的C++代码里,不需要通过树莓派和串口通信,更符合Arduino作为机械总控的设计原则。

PlatformIO不自带红外的库,我用的是这个。PlatformIO使用第三方库实在太简单了,不需要下载安装,直接在配置里加上GitHub链接即可,参考我的配置文件。

还有一点,每一个红外遥控都不一样。家里的电视机、音响、空调遥控都可以用,你只需要在使用前匹配好按键和对应的码。我在代码里define的一堆KEY只适用于我的遥控器。你可以用这个代码来获得键码。注意:红外遥控有几种模式,我的遥控用的是最常见的NEC模式,如果你匹配出来一堆乱码,可以考虑库里的其他几个模式。

对了,如果你用红外遥控,你还需要在车上装一个IR Receiver。我装在Arduino上,用8号端口。

如果你用了方案3.1,你也可以直接将IR Receiver装在树莓派的GPIO上。

五,其他

这些已经够你开车上路了。我在车上装了舵机(Servo),控制摄像头的上下转动。操作很直观,看代码就能理解。我没有装超声探头,这个可以帮助你检测障碍,在撞墙前强行停止。

如果你想远程看摄像头的实时画面,VNC不能胜任。可以考虑这个方案。但这样的话TensorFlow就不能再用摄像头了。应该有一个共用的方案,我没有探究。

差不多就这些了,我的代码没有太多注释,等有空往上加。如果你有疑问,可以留言问我。

福利:这里有一个延时摄影的简单程序,我在crontab里设置为每隔一分钟拍一张照,然后每天半夜将当天拍的照转成录像。下周打算带到公司里,找个风景好的位置,放几天,拍纽约的24小时风景。

转自 知乎赵智沉的作坊

树莓派串口(UART)编程Python示例

前言

本文将详细介绍树莓派的串口(UART)配置和使用,并结合一个modbus RTU从机的例子说明树莓派串口的应用。

在开始前说明以下几点

1.树莓派UART端口的位置

TXD位于HEAD-8

RXD位于HEAD-10

GND位于HEAD-6(可选其他GND)

2.树莓派的TXD应接USB转串口设备的RXD,当然如果测试失败请交换RXD和TXD的顺序

3.经过很多次的测试(N>25),当波特率为115200时打开树莓派的UART时,树莓派会莫名其妙的发送一字节0xF8,该问题始终无法解决。不过波特率为9600时并没有此问题,猜测是树莓派硬件或内核驱动问题。

4.树莓派的串口默认为SSH调试使用,若要使用串口需要修改两处文件。

5.2016.11起新系统需要通过这个方法开启SSH服务

修改两处文件

1./boot/cmdline.txt

输入以下指令

sudo nano /boot/cmdline.txt

删除以下部分

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

最终变为

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

2./etc/inittab

输入以下指令

sudo nano /etc/inittab

注释最后一行内容

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

使用minicom

配置完之后便可测试一下树莓派的UART是否正常工作,而minicom便是一个简单好用的工具。minicom是linux平台串口调试工具,相当于windows上的串口调试助手。

1.minicom安装

sudo apt-get install minicom

2.minicom启动

minicom -b 9600 -o -D /dev/ttyAMA0 #-b代表波特率,-D代表端口,/dev/ttyAMA0 类似于windows中的COM1,-o功能暂时未知。

3.minicom发送内容

直接在控制台中输入内容即可,如果minicom打开了回显可在控制台中观察到输出内容,如果回显关闭则控制台中没人任何反应,千万不要以为minicom没有正常工作。

4.minicom回显控制

先Ctrl+A,再E。可翻转回显状态(原来回显打开则此事回显关闭)

5.minicom回显关闭

先Ctrl+A,再Q。

使用pyserial

minicom仅满足调试用途,如果需要编程解决问题那么python的serial扩展库——pyserial则是一个不错的选择。pyserial模块非常好用,后面的文章还会分析如何使用pyserial控制GPRS模块。

1.pyserial安装

安装pyserial扩展库有很多种方法,可使用pip或者easy_install安装,也可以直接选择apt-get工具安装。

若使用apt-get工具安装,可输入以下指令

sudo apt-get install python-serial

2.串口回显程序

非常简单的一个串口程序,树莓派通过串口返回接收的内容。

# -*- coding: utf-8 -* import serial import time # 打开串口 ser = serial.Serial(“/dev/ttyAMA0”, 9600) def main(): while True: # 获得接收缓冲区字符 count = ser.inWaiting() if count != 0: # 读取内容并回显 recv = ser.read(count) ser.write(recv) # 清空接收缓冲区 ser.flushInput() # 必要的软件延时 time.sleep(0.1) if __name__ == ‘__main__’: try: main() except KeyboardInterrupt: if ser != None: ser.close()

总结

由于可借助python标准库使得树莓派的串口格外好用。是不是可以拿树莓派做一个Modbus RTU从机,的确可以请期待后面的博文吧。

参考资料

1.minicom使用国外博客

2.elinux python-serial 安装pyserial及例程等

出处:http://blog.csdn.net/xukai871105

更多树莓派串口相关内容:https://shumeipai.nxez.com/?s=%E4%B8%B2%E5%8F%A3

树莓派SQLite3的安装和操作简述

MySQL占用内存太大,而SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用。SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景按需说明。本文介绍的SQLite技巧也可以在其他平台使用,并不局限于树莓派。

安装 SQLite

sudo apt-get update sudo apt-get install sqlite sqlite3 #如果需要的话还可以顺便安装 PHP 相关组件 sudo apt-get install php5-fpm php5-sqlite

使用示例

1.创建表和插入数据

新建一个名为insert.sql文件,文件具体内容如下:

PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE temps( name TEXT DEFAULT ‘RPi.CPU’, tdatetime DATETIME DEFAULT (datetime(‘now’, ‘localtime’)), temperature NUMERIC NOT NULL ); INSERT INTO temps VALUES(‘RPi.CPU’, datetime(‘now’, ‘localtime’, ‘-3 hours’), 40.1); INSERT INTO temps(name, tdatetime, temperature) VALUES(‘RPi.CPU’, datetime(‘now’, ‘localtime’, ‘-2 hours’), 40.2); INSERT INTO temps(tdatetime, temperature) VALUES(datetime(‘now’, ‘localtime’, ‘-1 hours’), 40.3); INSERT INTO temps(temperature) VALUES(40.4); COMMIT;

【1】创建表,表中包括3个字段,分别为name,tdatetime和 temperature。

【2】name DEFAULT ‘RPi.CPU’,name字段的默认值为’RPi.CPU’,SQLite中字符串被单引号包裹。

【3】tdatetime DATETIME DEFAULT (datetime(‘now’, ‘localtime’)), tdatetime字段默认值为当前时间。

【4】datetime(‘now’, ‘localtime’)中的localtime表示本时区时间,如果没有该参数则为格林尼治时间。

【5】DEFAULT (datetime(‘now’, ‘localtime’)), 括号绝对不能少。DEFault中的表达式一定要被括号包裹。

【6】采用多种不同的插入方法,第一种不含字段名称,第二种包含字段名称,第三种,由于创建表格时有默认值,可以使用更简洁的插入方法,例如

INSERT INTO temps(temperature) VALUES(40.4);

2.创建表和插入数据

创建一个名为create-table.sh脚本,具体内容如下

#!/bin/sh rm -f cpu.db echo 开始插入数据 sqlite3 cpu.db < insert.sql echo 插入完成 【1】数据库名称为cpu.db 【2】sqlite3 cpu.db < insert.sql 把insert.sql脚本插入到数据库中,insert.sql包括两个步骤,建立表并向表中插入数据。 【3】修改执行权限 chmod a+x create-tabel.sh,然后执行./create-table.sh 【4】SQLite也有命令行模式,但是命令没有历史查询功能,写错了还要重新写一遍,所有shell脚本指令更利于修改和尝试。 3.查询内容 【简单查询】 新建一个名为show.sh的脚本,具体内容如下 #!/bin/sh DBNAME="cpu.db" sqlite3 $DBNAME "SELECT * FROM temps;" 【1】数据库名称为cpu.db。 【2】sqlite3 $DBNAME “select * from temps;” 查询表中所有记录。 【3】修改执行权限 chmod a+x show.sh,然后执行./show.sh 【4】执行结果如下,从结果来看插入的时间间隔一个小时,符合预期效果。 RPi.CPU|2014-08-02 17:27:47|40.1 RPi.CPU|2014-08-02 18:27:47|40.2 RPi.CPU|2014-08-02 19:27:47|40.3 RPi.CPU|2014-08-02 20:27:47|40.4 【修改时间顺序】——时间倒序输出 #!/bin/sh DBNAME="cpu.db" sqlite3 $DBNAME "select * from temps ORDER BY tdatetime DESC;" 【1】ORDER BY tdatetime DESC 以tdatetime降序排列。 【2】输出结果 RPi.CPU|2014-08-02 20:27:47|40.4 RPi.CPU|2014-08-02 19:27:47|40.3 RPi.CPU|2014-08-02 18:27:47|40.2 RPi.CPU|2014-08-02 17:27:47|40.1 【限制时间】——返回最近3个小时的数据 #!/bin/sh DBNAME="cpu.db" sqlite3 $DBNAME "SELECT * FROM temps where tdatetime > datetime(‘now’, ‘localtime’, ‘-3 hours’) ORDER BY tdatetime ASC;”

【1】datetime(‘now’, ‘localtime’, ‘-3 hours’) 表示当前时间3个小时之前的时间点,一定要加上localtime参数

【2】where tdatetime > datetime(‘now’, ‘localtime’, ‘-3 hours’) 限制条件3个小时之前到现在。

【3】输出结果如下,特别说明操作的时间约为22:05。

RPi.CPU|2014-08-02 19:27:47|40.3 RPi.CPU|2014-08-02 20:27:47|40.4

【限制时间】——查询某个时间段内数据

#!/bin/sh DBNAME=”cpu.db” sqlite3 $DBNAME “SELECT * FROM temps where tdatetime > datetime(‘2014-08-02 19:00:00’) and tdatetime <= datetime('2014-08-02 20:00:00');" 【1】2014-08-02 19:00:00 年必须占4个数字,其他必须占2个数字,不足时使用0不足。 【2】此处不需要增加localtime参数,具体原因未知。 4.总结 【1】创建表格时可使用DEFAULT约束,增加默认值简化插入操作,避免空值。 【2】INSERT操作含有多种方法,根据实际情况选用。 【3】SQLite datetime函数需要指定localtime参数,指定本地时区。 5.参考资料 出处:http://blog.csdn.net/xukai871105

树莓派忘记密码了?四步重设密码

树莓派忘记密码了?四步重设密码,收藏之以供不时之需~

第1步:取出SD卡

将树莓派关机,移除sd卡,插入到你的电脑。

第2步:编辑 cmdline.txt

在PC上打开SD卡根目录,启动部分是可见的,并包含一个名为“cmdline.txt”的文件。在编辑器中编辑这个文本,并将下文插入到已有文本的最后

init=/bin/sh

举个例子,如果原文是这样的:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

那么编辑后应该是这样的:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait init=/bin/sh

确保所有内容在同一行。保存文本内容,从pi出取出sd卡。

第3步:重设密码

将sd卡插入树莓派(我们在这里需要连上显示器和键盘)。将树莓派开机,估计在显示闪动的光标前需要等一会。

在标识符后,输入以下命令:

mount -o remount, rw / passwd pi

你会被提示输入一个新的密码,请仔细输入后并敲下回车键。系统会提示你再次确认输入密码

passwd pi Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

这样密码就修改完成了,现在输入以下命令去同步并执行初始化程序

sync exec /sbin/init

树莓派会继续启动,然后关掉树莓派并且断电。

sudo halt

第4步:编辑cmdline.txt文本

用电脑再次编辑这个文本:把我们在第二步加入的最后数据删除。

现在你可以插入sd卡到你的树莓派啦,再次启动就可以使用新的密码啦。

2019.2.3 更新

如果第二步之后,无法进入到第三步的终端输入界面,可以尝试将第二步中的 init=/bin/sh 替换为 single 。

引用:

1、raspberrypi-spy

2、https://www.raspberrypi.org/forums/viewtopic.php?t=44114

用逆向设计和回归算法估算PWM

大家在使用直流电机时经常遇到一个问题,那就是无法准确的控制他的转速。当然很多高手义无反顾的用上了码盘啊,霍尔啊等测速装置再加上PID啊啥的来完成设计。这种设计方法固然没错,但是也有一些人手头没有那么多资源或者暂时没有完成这整个工作的能力。我就见过一位同学无奈之下采用查表的办法来判断在需求什么样的速度时给多少PWM。这里我教各位一个小窍门,妈妈再也不担心我控制不好电机转速了。

首先,将电机接上PWM,记录下在各PWM数值时,电机的转速。并列表记录,如下表:

我随便填几个数,以便下一步演示。数据当然是越多越好,稍有误差也关系不大。随后我们将数据输入Microsoft Office EXCEL中。然后选中两行,点击菜单栏中的Insert ,然后选择Scatter,最后在弹出菜单后悬着那个有点和曲线的图标,来生成曲线。

从我随意输入的数据中,我们可以得到一个这样的曲线:

点击曲线,然后在右键菜单中选择Add Trendline…,会弹出下面这个对话框。一般我们选择Polynormial, 并在后面的Order框内选3以上的数(一般来说数字越高则对复杂曲线的拟合度越好,当然也有例外)。然后别忘了把最底部的两个小框点上钩。

选完后点Close, 图上就多了一条线,还有两个公式。第一个公式就是那根新的线,第二个R^2叫coefficient of determination。就是表示第一条公式和你的数据的相差多少。数字越接近1,公式越接近你的测量结果。所以我们只要在程序中输入这条公式,你的程序就知道该在需要什么转速的时候给多少PWM了。

y = -7E-06×4 + 0.0019×3 – 0.1569×2 + 5.7408x + 16.96 写进程序里就是:

int x = target_speed;//需要的速度 int pwm = int(-0.000007 * power(x,4) + 0.0019 * power(x, 3) – 0.1569 * power(x,2) + 5.7408 * x + 16.96);//根据EXCEL给的公式把速度换算成PWM。

备注1:此办法虽说能在一定程度上解决问题,但并不可靠,毕竟不是闭环控制。

备注2:在测试转速时,最好在电机带负载,电压恒定的情况下进行测试。不然测试数据会很不靠谱。数据也当然是越多越好。

备注3:此方法不但可以应用于电机,也可以用于各种连续系统,比如距离传感器就可以用这种办法来标定。

作者 Lee苦海

树莓派新系统SSH连接被拒绝的解决方法

近期时有树莓派玩家表示按照本站教程初装系统无法通过SSH连接树莓派,SSH连接提示“connection refused”。其原因是自 2016-11 官方发布的 Raspbian 系统镜像,系统默认禁用了 SSH 服务。

As of the November 2016 release, Raspbian has the SSH server disabled by default.

重新开启也很简单,把SD卡拔下来,进入到根目录,新建一个名为 ssh 的空白文件就行了。

好了然后再把卡插回树莓派,就可以使用SSH了。

P.S. Windows 用户在 PowerShell 下新建文件的命令是:

new-item ssh -type file

2018.1.22 更新:

如果完成上面的操作依然提示“connection refused”,则说明 SSH 服务没有启动。这时需要在树莓派命令行下手动启用 SSH 服务,命令如下:

service sshd restart

via

新产品:Raspberry Pi Zero W 发布

官网消息,今天树莓派五周年生日,Raspberry Pi Zero W (树莓派 Zero W 版本) 正式发布。尺寸和之前的树莓派 Zero 完全一样,在原基础上增加了无线网卡和蓝牙!这使得它在使用上无需借助过多的转接口和 USB HUB,非常让人期待。官方宣布的价格不再是5美元了(其实5美元国内基本不用想能买到啦),这次发布树莓派 Zero W 版本的价格是10美元。

树莓派 Zero W 配置如下:

1GHz, 单核 CPU

512MB RAM

Mini-HDMI 接口

Micro-USB On-The-Go 接口

Micro-USB 电源接口

40-pin GPIO HAT 预留焊接口

CSI 摄像头软排线接口

802.11n 无线网络支持

蓝牙 4.0 支持

同时发布的还有官方外壳:

之前的 Zero 获得方式主要为购买杂志赠送,这次的 W 版本依然会采用这种方式获得,官方新闻公布了这些杂志的名称。

HiFiBox DAC + RuneAudio 红外遥控方案(C语言实现)

之前在《HiFiBox DAC 自定义红外遥控配置教程》中介绍了树莓派上红外遥控的编码学习和使用,并且实现了遥控控制音乐播放的功能。

以上方案是基于 lirc 提供的软件实现。有树莓派玩家提供了一种通过编程实现红外读取的方法(C语言实现),此方法在树莓派2B、RuneAudio_rpi2_rp3_0.4-beta_20160321 版本上验证通过。这里的红外接收方法和代码也可以用于树莓派的其他红外模块,期待大家举一反三的应用。

如果你是 HiFi DAC + RuneAudio 玩家,自己也懒得折腾,可以在修改好config.txt启用红外接收功能之后,直接下载已经编译好了的 irm 程序运行。那也就意味着你只需要从这里开始往下配置就好了:)

用 SSH 工具登录系统(默认用户名 root 密码 rune)

安装 gcc 编译器

pacman -Sy pacman -S gcc

如果以上过程出错或更新很慢,可以遵循下面的方法修改软件源(可选步骤)。

nano /etc/pacman.d/mirrorlist

在第一个行添加中科大的软件源(树莓派3B对应armv7h,其他版本请参考这里修改)

Server = http://mirrors.ustc.edu.cn/archlinuxarm/armv7h/$repo

下载并安装 bcm2835

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.52.tar.gz tar zxvf bcm2835-1.52.tar.gz cd bcm2835-1.52 ./configure make make check make install

P.S.树莓派实验室建议你这样用make命令,用于保存安装信息日志,这样需要卸载的时候方便查看哪些文件安装在了系统目录中,例如/usr/lib下的库文件

make >& LOG_make &

make install >& LOG_install &

修改 config.txt

nano /boot/config.txt

修改 /boot/config.txt 中的如下配置,如果这两行备注释了请取消其注释

dtoverlay=lirc-rpi dtparam=gpio_in_pin=26

红外接收程序

以下是 HiFiBox DAC 玩家刘磊编写好的程序,适配随板赠送的遥控器可直接使用。

#include #include #include #define PIN 26 #define IO bcm2835_gpio_lev(PIN) unsigned char i,idx,cnt; unsigned char count; unsigned char data[4]; static int flag = 0; int exec_cmd(unsigned char key_val) { switch(key_val) { case 0x45://CH- printf(“Button CH-

“); break; case 0x46://CH printf(“Button CH

“); break; case 0x47://CH+ printf(“Button CH+

“); break; case 0x44://PREV printf(“Button PREV

“); system(“mpc prev”); break; case 0x40://NEXT printf(“Button NEXT

“); system(“mpc next”); break; case 0x43://PLAY/PAUSE printf(“Button PLAY/PAUSE

“); if (flag == 0) { flag = 1; system(“mpc play”); } else { flag = 0; system(“mpc pause”); } break; case 0x07://VOL- printf(“Button VOL-

“); system(“mpc volume -1”); break; case 0x15://VOL+ printf(“Button VOL+

“); system(“mpc volume +1”); break; case 0x09://EQ printf(“Button EQ

“); break; case 0x16://0 printf(“Button 0

“); break; case 0x19://100+ printf(“Button 100+

“); break; case 0x0d://200+ printf(“Button 200+

“); break; case 0x0c://1 printf(“Button 1

“); break; case 0x18://2 printf(“Button 2

“); break; case 0x5e://3 printf(“Button 3

“); break; case 0x08://4 printf(“Button 4

“); break; case 0x1c://5 printf(“Button 5

“); break; case 0x5a://6 printf(“Button 6

“); break; case 0x42://7 printf(“Button 7

“); break; case 0x52://8 printf(“Button 8

“); break; case 0x4a://9 printf(“Button 9

“); break; default: break; } return 0; } int main(int argc, char const *argv[]) { if (!bcm2835_init()) return 1; bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT); bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_UP); printf(“IRM Test Program …

“); while (1) { if (IO == 0) { count = 0; while (IO == 0 && count++ < 200) //9ms delayMicroseconds(60); count = 0; while (IO == 1 && count++ < 80) //4.5ms delayMicroseconds(60); idx = 0; cnt = 0; data[0]=0; data[1]=0; data[2]=0; data[3]=0; for (i =0;i<32;i++) { count = 0; while (IO == 0 && count++ < 15) //0.56ms delayMicroseconds(60); count = 0; while (IO == 1 && count++ < 40) //0: 0.56ms; 1: 1.69ms delayMicroseconds(60); if (count > 25) data[idx] |= (1<

树莓派 HiFiBox DAC 扩展板开始发售

树莓派实验室继瑞士军刀扩展板之后,又一款扩展板产品——HiFiBox DAC 今日开售了。这是一个针对音乐爱好者的产品,集成了 TI 公司专业的音频解码芯片 PCM5122,采用 I2S 接口标准整合了一套基于树莓派的完善的音频硬件解码系统。并支持 Volumio、RuneAudio、OSMC 等功能强大的播放软件,是快速搭建树莓派 HiFi 系统的不二之选!

HiFiBox DAC 适用于树莓派1代A+、B+,树莓派2代、树莓派3代、树莓派Zero,以及后续对该标准兼容的树莓派系列硬件。

详细介绍请戳:

树莓派 HiFiBox DAC 扩展板

教程和个性化配置攻略(陆续丰富中):

树莓派 HiFiBox DAC 扩展板

资源下载:

树莓派 HiFi DAC 扩展板资源下载

在线产品说明书:

https://shumeipai.nxez.com/downloads/hifibox-dac-instructions.pdf

喜欢请点这里购买。

HiFiBox DAC 扩展板加上 Volumio 系统搭配之后,把我的树莓派变成了完美的HIFI播放器!Airplay 是我最常用的使用模式,非常方便的把手机上播放的音乐同步输出到音箱,在几天的试用下来已经“中毒”,爱不释手。

音质方面,Pi上的电流声完全听不到了。我对 Tropical house 风格的音乐很偏爱,这款 DAC 的硬解码品质极高,解析还原干净透彻。可能是高中低三频的量上损失更低的原因,让人感觉三频的的质和量上都有显著的提升!高音入耳不绵软,低音不拖沓不浑浊,中频有劲道。播放音乐会时临场感真切。

外观上看起来很精致,没有一味地堆料拉高成本,但元件和电源底噪这块的布线看起来是用心做了设计的。整体上看,是我这种初烧+树莓派玩家非常棒的选择!

测试过的3组设备:方案1:雅马哈A-S201、派扬P1箱子;方案2:惠威M200有源;方案3:创新 Aurvana Air 耳机。

树莓派在日本新增生产据点以扩充全球产能

服务于全球工程师的分销商 Electrocomponents plc 集团旗下的贸易品牌RS Components (RS) (LSE:ECM) 近日与树莓派(Raspberry Pi)基金会联合宣布,依据一份本地合同制造协议,将在日本制造其最新的树莓派3信用卡尺寸单板计算机。此次提升树莓派的全球产能,是为了满足亚太地区对这一流行平台不断增长的庞大需求。

RS Components 公司亚太区产品、供应商、库存和定价管理主管William Chong表示:“树莓派的现有型号将继续在英国南威尔士制造,而双重制造地点的就位,将可满足未来的全球需求增长。亚太区是树莓派的一个显着增长市场,这一新的 ‘日本制造’元素意味着我们现在已经为该增长做好了准备。” 树莓派的所有版本都将可以在RS网站订购。

首款“日本制造”型号将是树莓派3型号B,在强大的内置64位ARM Cortex-A53四核处理器推动下,具有显着升级的处理能力,可实现比最初的树莓派快十倍的性能。

树莓派3是树莓派系列的最新迭代,该系列自2012年推出以来,在工程师和爱好者中取得了巨大成功。第一千万片树莓派于9月份伴随着欢呼声和庆祝出售,显示出这个用途极为广泛的低成本计算平台受到异乎寻常的广泛爱戴,可以为教育、工业、兴趣型电子项目、以及创客运动中的大量应用提供解决方案。实际上,其应用范围似乎是无穷无尽的。

Electrocomponents 的集团首席执行官 Lindsley Ruth 评论道:“我们很荣幸成为树莓派所取得非凡成就的一部分。它在很多工业应用以及教育行业中引起了巨大轰动。在这个非凡的成功故事中,RS是供应链中的一个关键节点,随着日本的新产能付诸实施,我们将会再接再厉,开创新的成功故事。”

Ruth 补充道:“RS相信,在日本的产能扩充将助力树莓派现象继续在全球风行。由于“随处计算” (computing everywhere) 日益成为‘新常态’,在工业、教育、以及发展中的创客运动中,增长机会无疑将会越来越多。随着智能家庭、智能工厂、智能电网和智能城市应用的普及,物联网(IoT)定将成为树莓派的一个巨大推动因素。树莓派已经衍生出一款笔记本电脑‘Pi-top’,这是一台用户自己组装的笔记本电脑,可以教授计算机架构的基础知识,并让学生们接触和修改笔记本电脑的硬件能力,而不仅是软件。”

RS在 www.china.rs-online.com 还提供一系列的树莓派新手套装。该新手套装将有三个版本,包括“官方的”优质套装、以及价格较低的高级套装和超值套装,可满足不同客户和预算的需求。这些新手套装能节省时间,使用方便,可以让用户拿到电路板后立即开始着手原型产品制作和开发项目。在RS顺畅的订货流程支持下,包括通过RS电子商务网站进行极为方便的在线订购,并有RS的准时交货承诺,这些新手套装具备了出色的附加价值。

RS在亚太地区已有20年经验,以此为后盾,竭力通过创新解决方案提供出色的客户体验,服务于明天的采购、资产管理和设计项目需求,而树莓派3新手套装正是另一个例子。

Eben Upton即将访问日本

树莓派基金会的创始人和受托人兼树莓派(贸易)公司的首席执行官Eben Upton将于12月11至14日访问日本。作为一名国际公认的技术领袖和远见卓识者,Upton将分享对于在RS支持下在日本扩充树莓派3产能的看法,并将与当地树莓派社区讨论行业热点话题和创意项目的想法。