Category Archives: Laboratory - Page 2

实时系统研究意义的思考

要想弄清研究实时系统的意义,首先必须明确实时系统在整个人类生活中的角色。

实时系统的主要研究对象是工业控制,交通和航空航天,电力及能源,网络设备及网络服务。这些系统的稳定性很大程度上决定了生命财产与经济的安全性:如电力系统的短时间崩溃会导致工业和交通停滞,并可能带来生命财产事故;航天飞行器的软件故障,会导致与地面控制中心的失联甚至是坠毁,带来巨大的财产损失。社会的正常发展和秩序很大程度上依赖于这些实时系统的稳定性和可靠性。纵使我们不想如此,人类生活的方方面面还是很大程度上依存于并不稳定的软件系统。设想如果有这样一个软件漏洞,使得多个重要系统在同一时间失控,那么其带来的社会影响和经济损失将不可估量。 实时系统的主要研究目标:保障实时系统在时间和行为上的可预测性,设立可靠的软件设计方法;就是在预防和避免以上的不可靠情况的出现。

至于在当前计算机速度已经如此之快的情况下,实时性研究是否还有其必要性。

答案我想也是肯定的。在新的计算机结构出现之前,CPU速度的提升不等同于系统实时性的提升。CPU速度的提升显然会减少程序的执行时间 (execution time),但是对于从请求产生到得出结果的响应时间 (response time) 及IO的输出间隔的稳定性 (IO jitter) 依然没有明确的保证。与此同时,更加复杂的操作系统和计算机硬件也提高了这种不确定性,例如Cache缓存和内存分页带来的运行时间浮动。综上所述,CPU速度的提升无法带来实时性上的保证,依然需要依靠实时性分析来保障系统在时间上的可预测性。

Smart Home | Update the smart home architecture to v1.2

The architecture of the Yunfei Smart Home project is changed again. This time the system adopt the new bought HP ProLiant Microserver Gen 8 as the main server, instead of using an ARM-based embedded system. This evolution improves both the storage and computation capacity of the server, which makes it possible to deploy more complex nodes in the system and to provide a better user interface. The 12TB maximum storage capacity of the server also makes it an ideal NAS server for storing personal photos and videos!

smart_home_architecture_v1_2

6681698bjw1eqq6z82ttvj20hs0dctaq

【RPi树莓派使用指南】在树莓派上安装MySQL数据库

在嵌入式Linux平台下如果需要使用数据库功能,一般会选择SQLite或MySQL。SQLite是轻量级、基于文件的关系数据库,系统资源占用较少;但是SQLite的缺点是不支持远程部署和访问。对于大多数应用,SQLite是很易用的数据库,我之前就使用过它开发过一套生产管理系统;但是当需要远程访问数据并提供数据库安全时,MySQL则是更好的选择。考虑到树莓派的性能局限,其本身并不适合集成数据展示功能(无论是基于GUI的还是基于web的)。于是可以将其只作为数据记录平台,而将数据的整理、展示在PC端完成。这种模式下,树莓派可以作为数据采集主机,将有线 / 无线节点的数据进行集中采集记录,再通过PC进行分析和展示。在这样的初衷驱使下,我研究并整理了如何在树莓派上安装和使用MySQL。

1. 安装MySQL
使用管理员权限运行apt-get获取最新的MySQL及Python编程接口(之后用于数据库编程):

<br />
$ sudo apt-get install mysql-server python-mysqldb<br />

安装过程中需要输入root管理员的密码,该密码之后用于访问数据库系统。

2. 测试MySQL
通过以下命令运行MySQL的命令提示系统,并输入在安装过程中设置的密码:

<br />
mysql -u root -p</p>
<p>Enter password:<br />
Welcome to the MySQL monitor.  Commands end with ; or \g.<br />
Your MySQL connection id is 47<br />
Server version: 5.5.41-0+wheezy1 (Debian)</p>
<p>Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.</p>
<p>Oracle is a registered trademark of Oracle Corporation and/or its<br />
affiliates. Other names may be trademarks of their respective<br />
owners.</p>
<p>Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.<br />

查看当前已建立的数据库:

<br />
mysql&gt; SHOW DATABASES;<br />
+--------------------+<br />
| Database           |<br />
+--------------------+<br />
| information_schema |<br />
| mysql              |<br />
| performance_schema |<br />
+--------------------+<br />
3 rows in set (0.00 sec)<br />

3. 创建一个新的数据库和表单
以上数据库都是系统建立的数据库,要想开始插入数据,首先需要建立新的数据库和表单。这里假设要实现一个CPU温度记录的功能,存放在名为”sensordb”的数据库中。使用以下命令建立数据库:

<br />
mysql&gt; CREATE DATABASE sensordb;<br />
Query OK, 1 row affected (0.00 sec)<br />

查看数据库是否建立成功:

<br />
mysql&gt; SHOW databases;<br />
+--------------------+<br />
| Database           |<br />
+--------------------+<br />
| information_schema |<br />
| mysql              |<br />
| performance_schema |<br />
| sensordb           |<br />
+--------------------+<br />
4 rows in set (0.01 sec)<br />

在sensordb数据库下创建一个表单(table),该表单包含两个域(fields):日期和当天平均CPU温度。时间域使用的数据格式为DATE;而温度使用DECIMAL(4,1),即最大三位整数加一位小数。

<br />
mysql&gt; USE sensordb;<br />
Database changed</p>
<p>mysql&gt; CREATE TABLE cputemptable(recordtime DATE, temp DECIMAL(4,1));<br />
Query OK, 0 rows affected (0.03 sec)<br />

查看表单是否建立成功:

<br />
mysql&gt; SHOW TABLES;<br />
+--------------------+<br />
| Tables_in_sensordb |<br />
+--------------------+<br />
| cputemptable       |<br />
+--------------------+<br />
1 row in set (0.00 sec)<br />

查看表单的域名称与类型:

<br />
mysql&gt; DESCRIBE cputemptable;<br />
+------------+--------------+------+-----+---------+-------+<br />
| Field      | Type         | Null | Key | Default | Extra |<br />
+------------+--------------+------+-----+---------+-------+<br />
| recordtime | date         | YES  |     | NULL    |       |<br />
| temp       | decimal(4,1) | YES  |     | NULL    |       |<br />
+------------+--------------+------+-----+---------+-------+<br />
2 rows in set (0.01 sec)<br />

4. 向数据库中插入测试数据
在上一步中已经成功建立了用于CPU温度采集的数据库和表单,但是因为没有任何数据,所以该表单中没有任何内容。现在通过手动插入的方式向该表单中插入若干数据,测试是否可以正常运行。

<br />
mysql&gt; INSERT INTO cputemptable<br />
    -&gt; values('2015-03-25', 36.5);</p>
<p>mysql&gt; INSERT INTO cputemptable<br />
    -&gt; values('2015-03-26', 39.5);<br />

以上每条如果操作成功,都回返回提示:

<br />
Query OK, 1 row affected (0.00 sec)<br />

5. 查看数据库操作的结果
为了验证以上数据是否成功插入,可以通过select语句检索数据库:

<br />
mysql&gt; SELECT * FROM cputemptable;<br />
+------------+------+<br />
| recordtime | temp |<br />
+------------+------+<br />
| 2015-03-25 | 36.5 |<br />
| 2015-03-26 | 39.5 |<br />
+------------+------+<br />
2 rows in set (0.00 sec)<br />

可以看到之前的两条数据已经成功插入到cputemptable数据表中。

最后使用quit退出交互系统:

<br />
mysql&gt; quit<br />
Bye<br />

整个过程下来,发现MySQL在树莓派上的部署与操作与在桌面Linux平台上几乎没有差别。这里唯一需要注意的是,因为树莓派的硬件资源有限,所以在配置MySQL的优化选项时,需要降低其对系统资源的使用。具体配置细节在我亲自研究试验之后再进行补充。

下篇预告:在树莓派上使用Python进行MySQL数据库编程

Processing | 用递归创造复杂图形

在Processing中想要创作复杂的图形元素,除了可以使用循环结构外,还可以使用递归 (recursion) 。递归是一种在函数执行时调用自身的一种特殊设计方法,递归可以解决很多循环结构无法解决的问题,同时在代码实现上也极为简洁。

为了可以更直观的了解什么是递归,这里先给出一个例子:

<br />
// Recursive Circle<br />
// YunFei<br />
void setup() {<br />
  size(420, 420);<br />
  drawCircle(400);<br />
}</p>
<p>void draw() {<br />
  noLoop();<br />
}</p>
<p>void drawCircle(float radius) {</p>
<p>  if (radius &lt; 10) {<br />
    return;<br />
  }</p>
<p>  ellipse(width/2, height/2, radius, radius);</p>
<p>  drawCircle(radius - 20);<br />
}<br />

该代码生成的图形如下:
20150312224944

在上例中,drawCircle() 函数在返回前再次调用了drawCircle(),同时半径参数减小了20。所以drawCircle(400)会调用drawCircle(380),drawCircle(380)绘制完毕后又会调用drawCircle(360),… …,直到drawCircle(20)调用drawCircle(0)。此时,因为radius小于给定的容限(radius < 10),drawCircle(0)直接执行了return语句返回了该函数,从而不会再继续调用drawCircle(-20)。随着drawCircle(0)的返回,其余函数也逐级返回,直到所有嵌套的函数完全结束。

递归虽然相比循环在代码上更为简洁,但是设计难度却大于循环结构。设计递归时有两个注意点:
1)是程序的规模要不断减小 (此处每次radius – 20),否则程序会陷入死循环无法退出;
2)有一个合适的中止条件 (此处为radius < 10),一般来说小于某个容限值比等于某个极限值更为可靠。

下面以一个更复杂的例子,树型分形,来展现递归的美妙(代码修改于Daniel Shiffman, The Nature of Code):

<br />
// Recursive Tree<br />
// YunFei<br />
void setup() {<br />
  size(500, 500);<br />
  background(255);<br />
  translate(width/2, height);<br />
  stroke(0);<br />
  drawBranch(150);<br />
}</p>
<p>void draw() {<br />
  noLoop();<br />
}</p>
<p>void drawBranch(float len) {<br />
  float theta = PI/6;</p>
<p>  strokeWeight(2);<br />
  line(0, 0, 0, -len);</p>
<p>  translate(0, -len);</p>
<p>  len *= 0.66;</p>
<p>  if (len &gt; 10) {<br />
    pushMatrix();<br />
    rotate(theta);<br />
    drawBranch(len);<br />
    popMatrix();    </p>
<p>    pushMatrix();<br />
    rotate(-theta);<br />
    drawBranch(len);<br />
    popMatrix();<br />
  }<br />
}<br />

实现的效果如下:
20150312232827

以上分形图形随着枝的逐层生长,分支的数量呈指数倍、而非线性增长,循环结构无法解决该问题。可见,灵活使用递归可以创造更为复杂的图形元素。实际上,递归更多情况下被用于求解数学问题,如最为经典的牛顿迭代法求解方程,就可以使用递归函数来计算。

【RPi树莓派使用指南】树莓派常见问题整理与解答

这篇博文整理了在使用树莓派的过程中常见的问题和解答,以及我自己在使用时遇到的问题与总结,供树莓派爱好者快速查阅。本文根据需要不断更新,也欢迎读者留言提问与补充。

一、基本操作与管理

Q: 树莓派的默认登录密码是什么?
A: 用户名: pi,密码: raspberry

Q: 树莓派如何解锁root?
A: 解锁方法如下:

<br />
#设置root密码<br />
$sudo passwd root</p>
<p>#解锁root用户<br />
$sudo passwd --unlock root</p>
<p>#切换当前用户到root<br />
$su root<br />

Q: 如何启动树莓派的图形界面?
A: 命令行中输入startx。如果要设置开机启动默认为图形模式,可使用 raspi-config 命令进行配置。

Q: 如何格式化输出当前系统时间?
A: 使用 date -d today +“格式化参数” 。如下例所示,引号内为格式化字符串,可自行修改为需要的格式:

<br />
date -d today +&quot;%Y-%m-%d %H:%M:%S&quot;<br />

Q: 如何读取树莓派CPU和GPU的温度?
A: 查看CPU温度(读数除以1000):

<br />
$cat /sys/class/thermal/thermal_zone0/temp<br />

查看GPU温度:

<br />
$/opt/vc/bin/vcgencmd measure_temp<br />

Q: 如何修改树莓派HDMI显示的分辨率?

A: 修改SD卡中的 config.txt  配置文件,配置方法见此处

Q: 树莓派如何设置静态IP地址?
A: 修改 /etc/network/interfaces  配置文件,配置方法为:

<br />
iface eth0 inet static<br />
address 192.168.1.100  # Static IP Address<br />
netmask 255.255.255.0  # Netmask<br />
gateway 192.168.1.1    # Gateway<br />

Q: 如何查看树莓派当前进程与CPU使用情况?
A: 查看所有进程:ps -a ,查看CPU当前使用情况:top

Q: 如何查看树莓派当前内存及硬盘使用情况?
A: 使用 free 命令查看内存使用情况,也可以使用 free -m 以MB为单位显示。对应的可以使用 df 或者 df -m 查看硬盘使用情况。

Q: 如何查看树莓派已载入的模块和已加载的USB设备?
A: 分别使用 lsmod lsusb 命令。如果要查看所有加载的设备,直接输入 ls /dev 查看设备虚拟文件夹。

Q: 树莓派支持哪些USB摄像头?
A: 见 RPi USB Webcameras。支持的较好的还是罗技和微软的低分辨率型号。有些摄像头功耗较大,需要外部供电。

Q: 树莓派支持哪些USB无线网卡?
A: 见 RPi USB Wi-Fi Adaptors。推荐EDUP的迷你WiFi网卡以及树莓派官方销售的配套网卡。

Q: 树莓派如何配置无线网络?

A: 分为两步:1、设置wlan0接口,2、设置WiFi配置文件。

第一步,在树莓派命令行中输入:sudo vim /etc/network/interfaces

在打开的文件中添加:

<br />
auto wlan0<br />
allow-hotplug wlan0<br />
iface wlan0 inet dhcp<br />
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf<br />

第二步,在树莓派命令行中输入:sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

在打开的文件中末尾添加WiFi ssid和密码:

<br />
network={<br />
ssid=&quot;无线网络ssid&quot;<br />
psk=&quot;无线网络密码&quot;<br />
proto=RSN<br />
key_mgmt=WPA-PSK<br />
pairwise=CCMP<br />
auth_alg=OPEN<br />
}<br />

插入无线网卡,重启树莓派即可。

Q: 树莓派如何和电脑之间传输数据?
A: 树莓派默认打开了SFTP服务,只需要使用专用的FTP软件(如 FlashFXP),并在登陆时选择SFTP方式登陆即可,连接URL填写树莓派的IP地址,而登陆的账号密码和开机密码相同。

Q: 树莓派兼容的SD卡?
A: 该页面给出了所有树莓派可以使用的SD卡型号和大小:RPi_SD_cards

二、多媒体

Q: 树莓派如何播放MP3音乐?
A: 因为树莓派没有音频输出,首先需要配一个USB声卡或者专用的Walfson扩展板。之后安装 mplayer 音乐播放器 sudo apt-get install mplayer。使用以下命令将当前目录下的所有MP3文件创建为一个Playlist:

<br />
find ./ -type f -iname &quot;*.mp3&quot; &amp;gt; playlist.m3u<br />

Q: 树莓派如何播放视频?
A: 安装 omxplayer,支持 1080P 的 AVI 和 MP4 硬解码。

三、应用开发

Q: 树莓派支持哪些编程语言?
A: 树莓派自身包含了gcc / g++ 4.6 编译器,所以支持C和C++的开发;不过我推荐使用的语言还是Python,树莓派内置两个版本的Python,分别为 Python 2.7 和 Python 3.2。Python对于网络和串口的开发也有对应支持,而且也有支持Python的GPIO库 (RPi.GPIO)。

Q: 树莓派如何连接Arduino?
A: 三种方法,第一种为直接使用USB线缆进行连接,对于使用独立USB串口芯片的型号,在Linux中的显示名称为 /dev/ttyUSB0, 而对于使用另一片Arduino进行USB通信的型号显示为 /dev/ttyACM0;第二种为使用树莓派的IO串口进行通信,此方法的相关配置见此处;第三种方法还可以使用无线模块进行远程通信。

Q: 树莓派如何使用TTS功能?
A: 首先需要树莓派具有音频输出设备(如USB声卡)。下载festival程序库,sudo apt-get install festival。使用方法为:

<br />
$echo &quot;Do not touch me. I am dangerous!&quot; | festival --tts<br />
$festival --tts Simple_Test.txt<br />

Q: 如何操作树莓派的GPIO?
A: 可以使用RPi.GPIO, WiringPI或bcm2835 c库三种方法。我在另一篇博文”【RPi树莓派使用指南】树莓派接口定义及GPIO驱动方法“里详细介绍了这三种方法。

Q: 树莓派如何支持模拟量采集?
A: 目前还没有标准方案,不过可以通过与Arduino的通信实现模拟量采集及PWM输出功能。

Q: 树莓派如何安装OpenCV?
A: 执行以下命令安装OpenCV及Python支持库。

<br />
$sudo apt-get install libopencv-dev python-opencv<br />

Q: 树莓派如何编译Kernel?
A: 见官方的“树莓派编译指南”及Argu的“树莓派 Kernel 编译笔记”。

【RPi树莓派使用指南】Raspberry PI网络配置与SSH远程登录

树莓派虽然支持鼠标、键盘和显示屏等交互外设,但是每次使用时都要连接很多线缆,很不方便。而使用远程登陆就不会有这些不便。之前在 【RPi树莓派使用指南】使用VNC远程查看桌面 一文中介绍了远程查看桌面的方法,但是远程查看桌面会占用大量网络带宽,影响操作速度。对于不需要查看图形桌面,只需要使用terminal的情况,这里再介绍一下使用SSH远程使用树莓派控制台的方法。

在配置远程登陆之前,最好将树莓派的IP地址由 DHCP 改为 静态IP 地址,这样可以保证树莓派每一次上电后在路由器上注册的地址是一致的,从而在远程登陆时不需要再去确认树莓派的当前IP。配置的方法是修改网络配置文件:

<br />
sudo nano /etc/network/interfaces<br />

将eth0的相关配置由 dhcp 修改为 static,并增加要设置的静态IP地址、子网掩码和网关地址:

<br />
iface eth0 inet static<br />
address 192.168.1.100  # Static IP Address<br />
netmask 255.255.255.0  # Netmask<br />
gateway 192.168.1.1    # Gateway<br />

重新启动树莓派使配置生效。

远程登陆的软件推荐使用轻量级的PuTTY,该软件是绿色、单个文件的程序,其下载地址为:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

下载完成后运行PuTTY,输入树莓派的地址,并将连接模式选择为SSH(默认):

140910_puTTY
Figure 1.1  PuTTY的设置界面

点击 Open 建立连接,如果弹出警告窗口直接按确认即可。如果连接无误,将会看到输入用户和密码的提示,此时输入用户名 pi,密码 raspberry,即可完成远程连接的建立:

140910_puTTY2Figure 1.2  PuTTY登陆成功界面

连接成功之后,就可以像在本地操作树莓派一样通过 terminal 来操作树莓派了。

Windows下使用Eclipse开发Arduino程序

Arduino IDE功能简单,对于不熟悉编程环境的用户十分容易上手;但是对于大型的Arduino项目开发,如果再使用自带的IDE就会多少显得不便。之前我曾经使用过Eclipse + CDT + avr-gcc开发AVR程序,鉴于Arduino也是基于AVR和avr-gcc的,理论上应该也可以使用Eclipse开发。Google之后发现在Arduino官方网站上就有配置方法的介绍[1],此处自己按照步骤实现了一下,并将要点归纳如下。这里仅针对Windows平台,对于其他平台的用户请在原文中找到对应的配置方法。

(作者补充:Eclipse配置Arduino相对比较麻烦,如果想要相对简单的配置方法,可以使用Arduino for Visual Studio插件配合VS2012 – 2015使用,感谢Herry的评论。)

1.下载Eclipse IDE for C/C++

下载地址在Eclipse网站:http://www.eclipse.org/downloads/该下载页面中有很多Eclipse版本,找到并下载C/C++版本:

eclipse-cpp-download

2. 在Eclipse环境中安装AVR插件

打开Eclipse软件,点击菜单 > Help > Install New Software…

在弹出的菜单中的 “Work with:” 处输入插件更新的URL地址: http://avr-eclipse.sourceforge.net/updatesite,点击 “Next>” 按照提示安装即可。

Read more »

Gameduino | Gameduino 2: Arduino图形开发板

一、Gameduino 2简介

今天给大家介绍的新玩意是去年十月在Kickstarter上筹资成功的一款嵌入式图形外设:Gameduino 2。Gameduino 2是Gameduino的升级版,这两款硬件都曾经在Kickstarter成功筹资。与Gameduino一代不同,Gameduino 2集成了TFT触摸屏,从而不需要像一代一样使用VGA输出图像,使得其更加整体化。

云飞实验室在该开源项目中,参加了中文手册的翻译和制作工作。最新的Gameduino 2中文手册 (V1.0) 可以在此处下载

image
Figure 1. Gameduino 2
在Kickstarter的筹资

Gameduino 2结合GPU芯片、4.3寸触摸屏、三轴加速度传感器、SD卡接口和音频接口,主要设计目标是构建一个基于Arduino / 树莓派的游戏平台,但就我目前的使用情况,该平台同样适用于设计简单的用户交互界面,而且经过移植同样可以用于其他嵌入式平台。我在英国Cool Components网站上以54磅(540人民币)的价格购得,因为较新所以目前国内销售该平台的厂商还不多,相信不久就能跟进了。

clip_image001
Figure 2. Gameduino 2
实物图(正面)

目前在原作者的支持下,Gameduino 2的开发手册已由本实验室翻译完成并正式发布(下载链接见本页置顶)。同时,云飞实验室也将提供关于该模块的实验例程与技术支持。

clip_image003
Figure 3. Gameduino 2实物图(背面)

二、Gameduino 2主要特性

● 与Arduino、树莓派等控制器结合使用,提供软件支持库,极易使用;

● 使用FTDI公司FT800 GPU芯片,该芯片为SPI接口,最大支持驱动512*512像素的LCD屏,具有内置的图形指令、触摸屏指令和音频指令;

● 使用4.3寸LCD触摸屏,视频分辨率为48027224bit;

● 类Open-GL的图形编程指令;

● 最大支持2000个图形分块(sprites);

● 256KB视频缓冲;

● 提供旋转、伸缩以及双线性过滤;

● 硬件支持点、线、圆的绘制,16倍抗锯齿;

● 硬件支持JPEG的载入;

● 硬件支持文本、按钮、渐变色的绘制。

正是由于以上的特性,Gameduino有极强的图形绘制能力,可以在低速MCU上实现复杂的2D/3D图形绘制。

三、硬件接口

Gameduino 2的引脚定义如下:

gameduino2_pinout
Figure 4. Gameduino 2引脚定义

从图中可见,Gameduino 2主要使用了一组SPI接口,被GPU与SD卡复用,通过D8与D9选通;另外三个模拟信号用于加速度传感器,输出的模拟量与对应轴的加速度成正比。还有一个INT引脚我目前也不太清楚用于什么用途,推测应该是触摸事件的中断信号。

四、应用领域与实例

在我看来,Gameduino 2可能的应用领域有:

● 图形编程的学习平台

● 电子艺术与图形算法验证

● 树莓派及Arduino的用户交互界面

● 与传感器结合实现环境交互式作品

说了这么多,下面展示几个基于Gameduino 2的作品:

0s01736447447IMAG1419
Figure 5. Gameduino 2+Arduino Mega显示Hello World

0s0-1246227742IMAG1424
Figure 6. Gameduino 2+Arduino UNO显示混沌图形

 main2
Figure 7. 官方例程:blobs

 main4
Figure 8. 官方例程:cobra(3D)

 main3
Figure 9. 官方例程:chess

 main7
Figure 10. 官方例程:invaders

目前云飞实验室可能是国内最早接触到这款GPU图形外设的博客,实际使用一段时间后,Gameduino 2的性能给我留下了深刻的印象,这也是为什么我愿意深入研究这个项目的原因。目前在原作者的支持下,我正在进行本模块说明手册的翻译,等翻译工作完成后,我将提供更多关于Gameduino2的使用方法与例程,同时会将Gameduino 2移植到更多的嵌入式平台。

【相关链接】

[1] GD2 项目主页:http://excamera.com/sphinx/gameduino2/index.html#gameduino2

[2] GD2 Kickstarter:https://www.kickstarter.com/projects/2084212109/gameduino-2-this-time-its-personal

[3] GD2技术讨论论坛:http://gameduino2.proboards.com/

【修订历史】

V1.1   2014/03/30  增加了应用领域一节。

Arduino Yun入手评测与基本配置指南

一、不一样的Arduino Yún

DSC01304
Figure 1. Arduino Yún开箱图

上周末从英国本地的网站买到了觊觎已久的Arduino Yún,今天拿到之后大概试用了一下。在我看来,最新的Arduino Yún在三个方面完全不同于以往的Arduino:
1) 高运算速度;
2) 与Linux系统的结合;
3) 网络连接的无缝性。

1) 运算速度

Arduino的运算速度和性能一直是被Geeks诟病的问题,很长一段时间,我也因此拒绝使用Arduino。所以Arduino团队发布了Arduino Due,试图提高Arduino系列的计算能力。而Arduino Yún则是Due的又一次升华,此次Yún使用CPU+MCU架构,400MHz主频的Atheros AR9331处理器使得更多复杂算法的实现成为可能,突破使用单一ATmega32u4单片机16MHz的束缚,让玩家们更加自由的发挥自己的想法。

DSC01307
FIgure 2. Arduino Yún正面特写

2) 与Linux系统的结合

此次Arduino Yún使用CPU+MCU架构,使用一款Bridge的软件包通过UART实现双处理器之间的通信。AR9331内置了发行代号为Linino的Linux版本,此版本基于著名的OpenWRT开源路由器系统。这也是Arduino第一次将Arduino与Linux进行结合,因为Linux有数不甚数的软件包,其引入大大提高了Arduino的可玩性。Yún的有线网络、WiFI、USB Host、microSD等功能都是由AR9331控制的,该方案相比以前的使用Arduino + 扩展板在性能和易用上都有很大提升。内建的USB通讯与Linux系统对多种外设的支持,使Yún可以直接支持外接鼠标、键盘、摄像头、U盘等USB设备。

Read more »

【RPi树莓派使用指南】树莓派连接HDMI显示器及配置方法

之前在”【RPi树莓派使用指南】使用VNC远程查看桌面“一文中介绍了在没有LCD的情况下,如何访问树莓派的图形桌面。不过有些时候还是外接显示屏比较方便,尤其是像用IDLE调试Python程序的时候。

因为树莓派只有AV和HDMI接口,而目前大多数电脑显示器都没有这两种接口,接电视上又不方便。淘宝上虽然有一些支持树莓派的显示模组,不过不仅价格贵,而且大多数尺寸都很小。

其实有一个很简单的方法,就是找一个迷你的液晶电视,因为现在的电视一般都会含有HDMI接口。我在ebay上就买到一个15.6寸的迷你液晶电视,可以直接用HDMI – HDMI线缆连接树莓派。其15.6寸的大小和有些笔记本一样大,携带也很便捷。对于基于pygame和Arduino的应用,有了显示屏确实会方便许多。

目前对普通电脑显示器增加HDMI接口也是趋势,相信不久也会有更多支持HDMI接口的液晶显示器了。当然对于普通的VGA显示器还可以使用VGA – HDMI转换器,不过这种方法不是很稳定,据说有些质量不好的转换器还会损坏树莓派的HDMI芯片,所以并不推荐。

DSC01302

不过在实际使用时,发现有时会出现屏幕显示不完全或字体过小的情况,此时就需要手动配置HDMI的显示分辨率。树莓派HDMI分辨率的配置方法如下:

Read more »