Arduino Yun Tutorial CN

From Wiki for Dragino Project
Jump to: navigation, search

Arduino Yun使用说明

MS14 Dragino是能够运行Arduino的云软件,并通过Arduino YUN提供强大的功能。固件可以从这个链接下载

此页面提供的信息,是介绍如何在MS14上面使用Arduino YUN软件,如何设计一个控制模块并使用Arduino YUN。其他Arduino YUN的详细资料请访问Arduino的Arduino Yun 官方链接


MS14 和Arduino YUN硬件之间的差异

MS14 和Arduino YUN硬件之间的差异
使用Lenoardo 与Dragino MS14连接

Arduino YUN 与MS14硬件稍有不同,导致软件有些更改:

  • Arudino YUN硬件是 AR9331 CPU和AVR CPU设计在同一个主板上。
  • Dragino MS14主板部分只包括了AR9331 CPU部分。用户定制的AVR部分需要设计成模块转接在主板上。当然用户灵活性更大,可以设计不同的硬件模块来支持YUN软件。

Web配置界面

在你第一次开机MS14(下载我们的定制过的YUN固件),可以看到开放的的wifi网络ID:Arduino YUN- XXXXXXX,并且连接它。

默认情况下,YUN作为一个WIFI AP来使用


使用一台计算机连接到这个wifi网络。PC将申请到一个IP地址,在这个网络段192.168.240.xxx内。MS14自身IP地址为192.168.240.1。因此,我们可以输入192.168.240.1 打开MS14配置页面。

Yun 的Web登录页面


登录后,GUI会显示WIFI / ETH接口状态。点击“ 配置“按钮,现在我们可以配置网络参数。 [[File:Yun_Web_Page2.jpg|550px|none|thumb|YUN的Web配置页面1 -- 系统密码配置]

YUN的Web配置页面2 -- 无线客户端配置

检测MS14 YUN

一旦MS14配置好无线路由器的IP地址。它将在网络中发送广播数据,如果你运行最新的Arduino IDE,它会自动检测YUN服务,并显示在“ port“菜单后面。

在同一网络中的检测到Arduino YUN



AVR固件升级

使用云软件,用户可以通过Arduino IDE 远程升级AVR的中的固件。在Arduino IDE支持中默认支持ATMEGA32U4,用户可以修改升级脚本,来支持ATMEL其他的芯片,如ATmege168,ATMEGA328等..。

在Arduino IDE中增加我们定制板类型

要添加定制板型号,我们的Arduino IDE 修改board.txt的信息。在Windows的机器,的boards.txt文件是在\program files\arduino\hardward\arduino\avr。打开这个文件,并复制下面内容,添加到文件的最后,我们定义为了模块mrfm12b。

##############################################################
 
MRFM12B.name=Dragino MRFM12B
MRFM12B.upload.via_ssh=true
MRFM12B.vid.0=0x2341
MRFM12B.pid.0=0x0041
MRFM12B.vid.1=0x2341
MRFM12B.pid.1=0x8041
MRFM12B.upload.tool=avrdude
MRFM12B.upload.protocol=avr109
MRFM12B.upload.maximum_size=14336
MRFM12B.upload.maximum_data_size=1024
MRFM12B.upload.speed=57600
MRFM12B.upload.disable_flushing=true
MRFM12B.upload.use_1200bps_touch=true
MRFM12B.upload.wait_for_upload_port=true
 
MRFM12B.bootloader.tool=avrdude
MRFM12B.bootloader.low_fuses='''0xff'''
MRFM12B.bootloader.high_fuses=0xdd
MRFM12B.bootloader.extended_fuses=0x00
MRFM12B.bootloader.file=atmega/ATmegaBOOT_168_diecimila.hex
MRFM12B.bootloader.unlock_bits=0x3F
MRFM12B.bootloader.lock_bits=0x2F
 
MRFM12B.build.mcu=atmega168
MRFM12B.build.f_cpu=16000000L
MRFM12B.build.vid=0x2341
MRFM12B.build.pid=0x8041
MRFM12B.build.usb_product="Arduino Yun"
MRFM12B.build.board=AVR_YUN
MRFM12B.build.core=arduino
MRFM12B.build.variant=standard
##MRFM12B.build.extra_flags={build.usb_flags}


文件修改后,重新启动的Arduino IDE,DRAGINO MRFM12B板型号就显示在tools ->board菜单。

在Arduino IDE 里面加一个新的板类型


选择正确的Bootloader

在升级固件之前,有下面几个文件需要修改:

1. /usr/bin/merge-sketch-with-bootloader.lua里面

         for line in io.lines("/etc/arduino/Caterina-Yun.hex") do
       改为:
         for line in io.lines(/etc/arduino/ATmegaBoot/ATmegaBOOT_168_diecimila.hex”)

2. /usr/bin/run-avrdude 里面,修改成如下内容

         #!/bin/sh
         echo 1 > /sys/class/gpio/gpio19/value
 
         ##We should check this line to make sure we have the correct part and fuse setting. 
         avrdude -c linuxgpio -C /etc/avrdude.conf -p m168 -U lfuse:w:0xFF:m -U hfuse:w:0xDD:m -U efuse:w:0x00:m -Uflash:w:$1:i $2
 
         echo 0 > /sys/class/gpio/gpio19/value

以上修改不需要重启----------------

3. /etc/avrdude.conf里面需要修改,下表是ar9331 GPIO与avr连接的引脚,见下图

Dragino MS14 AVRs Logic Level
GPIO20 /RESET 反向
GPIO18 SCK 同向
GPIO21 MOSI 同向
GPIO22 MISO 同向
#To check if your avrdude build has support for the linuxgpio programmer compiled in,
#use -c?type on the command line and look for linuxgpio in the list. If it's not available
#you need pass the --enable-linuxgpio=yes option to configure and recompile avrdude.
#
programmer
  id    = "linuxgpio";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
# for DS1 board
#  reset = ~18;
# for DS2 board
#  reset = ~7;
# for DS2_B board
  reset = ~20;     
  sck   = 18;
# mosi  = 6;
  mosi = 21;
  miso  = 22;
;


通过Arduino IDE编译和上传固件

之后,我们已经正确配置了上面板信息。我们可以使用Arduino的IDE编译和上传固件到AVR模块。

Arduino的IDE在上传的过程中,会要求输入密码。这是我们在Web GUI配置的密码,默认的是arduino的

在Arduino IDE编译并上传固件

通过Lenardo 连接到MS14

Lenardo有两个串行接口,PIN 1,PIN2是硬件串口,通过USB接口扩展了一个虚拟串口连接PC。Leonardo通过USB端口连接到电脑,硬件串口连接到MS14,实现了使用Arduino YUN中的网桥功能。有三个引脚需要连接,如下所示:

Lenardo.gnd -- MS14.gnd
Lenardo.digital.0 -- MS14.UART_TX
Lenardo.digital.1 -- 10K ohm -- MS14.UART_RX
Connect Leonardo to MS14

A连接完成后,我们用可以Arduino IDE的例子程序sketch来访问控制台。

/*
  Console Read example
 
 Read data coming from bridge using the Console.read() function
 and store it in a string.
 
 To see the Console, pick your Yún's name and IP address in the Port menu
 then open the Port Monitor. You can also see it by opening a terminal window
 and typing: 
 ssh root@ yourYunsName.local 'telnet localhost 6571'
 then pressing enter. When prompted for the password, enter it.
 
 created 13 Jun 2013
 by Angelo Scialabba 
 modified 16 June 2013
 by Tom Igoe
 
 This example code is in the public domain.
 
 http://arduino.cc/en/Tutorial/ConsoleRead
 
 */
 
#include <Console.h>
 
String name;
 
void setup() {
  // Initialize Console and wait for port to open:
  Bridge.begin();
  Console.begin(); 
 
  // Wait for Console port to connect
  while (!Console); 
 
  Console.println("Hi, what's your name?");
} 
 
void loop() {
  if (Console.available() > 0) {
    char c = Console.read(); // read the next char received
    // look for the newline character, this is the last character in the string
    if (c == '\n') {
      //print text with the name received
      Console.print("Hi ");
      Console.print(name);
      Console.println("! Nice to meet you!");
      Console.println();
      // Ask again for name and clear the old name
      Console.println("Hi, what's your name?");
      name = "";  // clear the name string
    } 
    else {       // if the buffer is empty Cosole.read() returns -1
      name += c; // append the read char from Console to the name string
    }
  }
}

这个代码可以通过Arduino IDE访问到网桥部分,编译和上传代码与本地硬件操作没有任何区别。请注意是,然编译和上传代码需要选择正确的的COM端口口。Arduino IDE->tools->端口需要设置为USB COM端口,而不是Arduino YUN,因为上传使用USB COM端口。

固件上传后,COM端口切换到Arduino和使用串行监视器看到的结果。如果一切顺利,测试结果如下图所示:

控制台读取示例

使用桥接库

桥接库,是Arduino YUN最重要的部分。桥接库定义了一套机制来约定AVR 与 主控(ar9331)的数据交换。AVR可以将数据发送到主控,主控收到命令后并执行,并把执行结果返回给AVR。

桥接库使用UART接口来交换数据。下面的方框图,它显示MS14和官方Arduino YUN连接的差异。随着MS14 Dragino的发展,我们可以使用不同类型的AVR,甚至使用其他品牌的MCU(如PIC)与桥库连接。

Arduino YUN与Dragino的MS14桥图之间的区别

官网Arduino Official Website. 中可以找到详细指导如何使用的桥梁库。我们写的AVR软件时,应考虑有几点:

  • 在默认的桥的例子Arudino IDE,它采用串行类打印调试信息。如果连接ar9331与 ATMEGA32U4,这是正确的,因为它会调用USB Virtule COM端口打印调试信息,但它不会有问题,如果你使用它如单片机ATmega168的328,因为他们没有USB虚拟COM端口。这个串行类将调用mega168/328的硬件串口,这将是与桥接库冲突。
  • Arduino的使用ledPin 13控制显示LED,在MS14 Dragino上用户也可以控制主板sensor led

例子程序‘sketch’的代码放置在这儿This Link

MS14固件升级

从Arduino YUN的官方网站上下载的固件将无法正常工作,因为部分引脚位置发生了改变。我们已经为MS14重新配置了一个软件库来修正这些差异。他们可以直接从网上下载 firmware download link.

通过Web界面升级

如果你已经有一个正确的YUN固件在MS14上运行。然后你就可以通过WEB GUI来升级固件。

Once you have a Yun firmware, you can upgrade the firmware via WEB GUI.

访问高级配置

打开页面系统 - >固件闪存升级的方法,说明如下所示: [[File:Update_Firmware.png|550px|none|thumb|通过Web GUI更新固件]

注意:网络升级固件使用xxx.squashfs sysupgrade.bin ,而不是其他


通过U-Boot的升级

MS14如果没有下载过YUN固件,你必须用UB00T来升级,第一:

设置TFTP服务器的IP 192.168.255.2和TFTP服务器的根目录上的固件。UBOOT与PC在同一个网段

在U-BOOT下,需要升级内核和rootfs:

升级内核

dr_boot>tftpboot 0x81000000 openwrt-ar71xx-generic-linino-16M-kernel.bin
dr_boot>erase 0x9fea0000 +0x140000 
dr_boot>cp.b 0x81000000 0x9fea0000 $filesize

升级文件系统

dr_boot>tftpboot 0x81000000 openwrt-ar71xx-generic-linino-16M-rootfs-squashfs.bin
dr_boot>erase 0x9f050000 +0xe50000    
dr_boot>cp.b 0x81000000 0x9f050000 $filesize

改变引导地址并复位

dr_boot> setenv bootcmd bootm 0x9fea0000
dr_boot> saveenv
dr_boot> reset

最后,系统将重新启动。


国内淘宝购买地址

http://item.taobao.com/item.htm?id=35385985476