Электронный компонент:Seeeduino Cloud

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Seeeduino Cloud[1]

Seeeduino Cloud – это микроконтроллерная плата на базе модуля Dragino HE и процессора ATmega32u4. HE (переводе с китайского «HE» означает «сердцевина») – это недорогой и высокопроизводительный WiFi-модуль (150 м, 2.4 ГГц), на который установлена операционная система OpenWrt. Seeeduino Cloud совместима с платами Arduino и «шилдами» Arduino, на 100% совместима с Grove, а также с IDE Arduino (начиная с версии 1.5.3). Помимо стандартного интерфейса Arduino, Seeeduino Cloud также оснащена встроенной поддержкой Ethernet и WiFi, а также портом USB-A, что делает ее очень удобной для конструирования прототипов, которым требуется сетевое соединение и память большой емкости. Кроме того, Seeeduino Cloud отлично подойдет на роль межсетевого интерфейса для проектов в сфере интернета вещей.

Применение

Вот несколько интересных проектов с использованием Seeeduino Cloud:

Функции

  • Совместимость с Arduino Yun
  • Сделана на базе WiFi-модуля Dragino HE
  • Операционная система OpenWrt (с открытым кодом)
  • Поддержка WiFi (2.4 ГГц, 802.11 b/g/n)
  • Поддержка Ethernet
  • Поддержка USB 2.0
  • Встроенные коннекторы Grove

Характеристики

Seeeduino Cloud оснащена двумя процессорами, поэтому эта глава поделена на две части – по каждой на процессор.

Модуль Dragino HE

Параметр Значение
Процессор ATHEROS AR9331
Тактовая частота 400 МГц
RAM 64 Мб
Flash-память 16 Мб
Операционная система OpenWrt
Интерфейсы Два RJ45, один USB-хост, один UART, четырнадцать GPIO-контактов
Питание 3.3 вольта
WiFi 150 м, 2.4 ГГц, 802 b/g/n

Микроконтроллер AVR

Параметр Значение
Микроконтроллер ATmega32u4
Flash-память 32 Кб
SRAM 2,5 Кб
EEPROM 1 Кб
Тактовая частота 16 МГц
Рабочее напряжение 5 вольт
Цифровые I/O контакты 20 шт.
Каналы ШИМ 7 шт.
Входные аналоговые каналы 12 шт.

Компоненты

На фото ниже изображены компоненты, установленные на Seeeduino Cloud.

  • Ethernet-порт RJ45. Этот LAN-порт подключен к ATHEROS AR9331 и имеет собственный IP-адрес, который можно использовать для подключения к интернету и управления устройствами.
  • Входной USB-порт. Позволяет подключить плату к ПК для программирования и питания. Micro USB – это широко распространенная версия USB, встречающаяся на телефонах Android и других устройствах. У вас дома наверняка можно найти большое количество кабелей этого типа.
  • USB-хост. Позволяет подключаться к самым разнообразным USB-девайсам вроде веб-камер, USB-накопителей, клавиатур, джойстиков и т.д.
  • Кнопка 32U4 RST. Нажатие на эту кнопку сбрасывает микроконтроллер ATmega32U4. Как правило, используется для перезапуска скетча.
  • Кнопка SYS RST. Нажатие на эту кнопку перезагружает систему Linux (в виде дистрибутива OpenWRT).
  • Кнопка WiFi RST. Нажатие на эту кнопку сбрасывает WiFi-настройки. Но есть один момент – кнопка поддерживает только долгое нажатие. Ее нужно зажать, держать в течение 5 секунд и лишь потом отпустить. Все другие настройки останутся без изменений. Если отпустить кнопку через 30 секунд после нажатия, это откатит ВСЕ настройки к фабричным значениям.
  • Коннекторы Grove. Это коннекторы для интерфейсов UART и I2C. Коннектор I2C также подключен к аналоговым контактам A4 и A5 (для SDA и SCL) – на тот случай, если вы захотите использовать их для интерфейса I2C. Коннектор UART подключен к цифровым контактам 0 и 1 (для RX и TX).
  • Порт ICSP. Это коннектор для ICSP-соединения ATmega32U4. Расположен на том месте, где у Arduino Uno, Due, Mega и Leonardo располагается стандартный гребешок ICSP/SPI. SPI-контакты этого порта (MISO, SCK и MOSI) также подключены к цифровым контактам 12, 13 и 11 (как на Arduino Uno).
  • Контакты. К входным/выходным контактам процессора Atheros AR9331 доступа получить нельзя. Все они подключены к процессору ATmega32U4. Но все 20 цифровых контактов 32U4 можно использовать и в качестве входных, и в качестве выходных контактов – при помощи функций pinMode(), digitalWrite() и digitalRead(). Они работают на 5 вольтах. Кроме того, все эти контакты оснащены подтягивающими резисторами (по умолчанию отключены) на 20-50 кОм и могут дать/получить силу тока номиналом не более 40 мА. Кроме того, некоторые из этих контактов имеют специальные функции:
    • Serial. Контакты 0 (RX) и 1 (TX). Используются для приема (RX) и отправки (TX) последовательных (TTL) данных при помощи аппаратного последовательного порта ATmega32U4. Обратите внимание, что на Seeeduino Cloud класс Serial используется для коммуникации по USB (CDC). Для TTL-коммуникации через контакты 0 и 1 используется класс Serial1. Аппаратные последовательные порты ATmega32U4 и AR9331 на Seeeduino Cloud подключены друг к другу и используются для коммуникации между этими двумя процессорами. Как обычно в системах Linux, последовательный порт AR9331 открыт для консоли, чтобы у пользователя был доступ к операционной системе. Это значит, что вы прямо из скетча можете получить доступ к программам и инструментам Linux.
    • TWI. Контакты 2 (SDA) и 3 (SCL). Через них осуществляется коммуникация TWI при помощи библиотеки Wire.
    • Внешние прерывания. Контакты 3 (прерывание 0), 2 (прерывание 1), 0 (прерывание 2), 1 (прерывание 3) и 7 (прерывание 4). Эти контакты можно настроить на срабатывание прерывания при переходе на значение LOW, при возрастающем/убывающем фронте импульса или при изменении значения. Более подробно читайте в статье о функции attachInterrupt(). Контакты 0 и 1 использовать для прерываний не рекомендуется, поскольку они также используются в качестве аппаратного последовательного порта, используемого для коммуникации с процессором Linux. Контакт 7 подключен к процессору AR9331 и в будущем, возможно, будет использоваться для квитирующего сигнала. Поэтому держите в уме, что использование этого контакта для прерывания когда-нибудь может привести к конфликту.
    • ШИМ. Контакты 3, 5, 6, 9, 10, 11 и 13. Предназначены для выдачи 8-битной ШИМ при помощи функции analogWrite().
    • SPI. Этот интерфейс находится на гребешке ICSP и на программном уровне осуществляется при помощи библиотеки SPI. Обратите внимание, что контакты SPI не соединены с цифровыми I/O контактами, как это сделано на Uno. Они доступны только на ICSP-коннекторе. Это значит, что если у вас есть «шилд», использующий SPI, но не оснащенный 6-контактным ICSP-коннектором, подключаемым к 6-контактому ICSP-коннектору на Seeeduino Cloud, этот «шилд» работать не будет. Контакты SPI также подключены к GPIO-контактам AR9331, благодаря чему процессоры ATmega32U4 и AR9331 также могут коммуницировать при помощи протокола SPI.
    • Входные аналоговые контакты. Их 11 штук, и это A0-A5 (находятся на тех же местах, что и у Uno), A6-A11 (находятся на цифровых контактах 4,6, 8, 9, 10 и 12). Все входные аналоговые контакты можно также использовать в качестве обычных цифровых I/O контактов. Каждый из этих контактов имеет 10-битное разрешение (т.е. поддерживает 1024 разных значений). По умолчанию напряжение на этих контактах составляет от 0 до 5 вольт, но верхнюю границу вольтового диапазона можно поменять при помощи контакта AREF и функции analogReference().
    • Контакт AREF. Опорное напряжение для входных аналоговых контактов. Используется вместе с функцией analogReference().

С чего начать

Seeeduino Cloud оснащена двумя процессорами. Первый – это ATmega32U4 как на Leonardo. Второй – Atheros AR9331, на котором работает Linux и беспроводной стек OpenWrt, благодаря которому плата может подключаться к сетям WiFi и Ethernet. Кроме того, благодаря библиотеке Bridge на Linux через IDE Arduino можно вызывать программы и скрипты, чтобы с их помощью подключаться к различным интернет-сервисам.

Программирование на ATmega32U4

Процессор ATmega32U4 программируется при помощи среды IDE Arduino. Если она у вас еще не установлена, то инструкции по установке можно почитать тут.

Установка драйвера

Во-первых, вам нужно:

  • Взять кабель Micro-USB. Для этого подойдет, к примеру, кабель для передачи данных (такой обычно идет вместе с телефоном Android). Если у вас такого нет, то его можно купить тут.

Внимание! Пользуйтесь сокетом Micro USB как можно бережнее. Он хрупок, и его можно сломать.

  • Подключить плату. Seeeduino Cloud автоматически тянет питание либо от USB-соединения с компьютером, либо от внешнего питания. Подключите плату к компьютеру при помощи USB-кабеля. В результате на плате должен загореться зеленый светодиод (с надписью «PWR»).
Для Windows

Версия IDE Arduino для Windows уже оснащена всеми необходимыми драйверами. Устанавливая ее, вы также разрешаете Windows установить и эти драйверы тоже. Подключите Seeeduino Cloud, и драйвера будут установлены автоматически.

Для MAC

Когда вы в первый раз подключите Seeeduino Cloud к Mac, запустится Keyboard Setup Assistant (мастер настройки параметров клавиатуры). Для Seeeduino Cloud ничего настраивать не нужно, поэтому вы можете закрыть этот диалог, просто нажав на красную кнопку в правом левом углу окна.

Для Linux

Для Ubuntu версии 10.0.4 и новее драйвера устанавливать не нужно, но убедитесь, что порт 5353 не блокируется фаерволлом.

Откройте первый скетч

Откройте в IDE Arduino скетч «Blink» (мигание светодиодом), кликнув на Файл > Примеры > 01.Basics > Blink (File > Examples > 01.Basics > Blink).

Выберите тип платы и порт

Далее кликните на Инструменты > Плата (Tools > Board) и выберите пункт, соответствующий вашей плате.

Теперь кликните на Инструменты > Порт (Tools > Port) и выберите порт, к которому подключена плата. Это будет, скорее всего, COM3 или выше (COM1 и COM2 обычно зарезервированы под аппаратные последовательные порты). Чтобы узнать, какой порт вам нужен, вы можете отключить свою плату, а затем снова открыть это меню – порт, который исчезнет. И будет портом, к которому подключена плата. Снова подключите плату и выберите нужный последовательный порт. Когда на вашей плате будет настроен WiFi, вы также увидите ее в разделе «Network ports», как на картинке ниже.

Загрузка программы

Теперь просто кликните на кнопку «Загрузка» («Upload») в IDE Arduino. Подождите несколько секунд – в результате на плате должны замигать светодиоды RX и TX. Если загрузка будет выполнена успешно, в статусной строке появится сообщение «Загрузка завершена» («Done uploading»).

Спустя несколько секунд после загрузки на плате должен замигать зеленый светодиод (он подключен к контакту D13). Если замигал, поздравляем! Настройка прошла успешно.

Программирование ATHEROS AR9331

Seeeduino Cloud оснащена интерфейсом WiFi и LAN-портом. Каждый из них имеет IP-адрес, который можно использовать для интернет-подключения и управления устройствами.

Настройка сети

Режим точки доступа WiFi

Когда вы в первый раз включите Seeeduino Cloud, она запустит открытую WiFi-сеть под названием «SeeeduinoCloud-AXXXX», которая будет отображаться в списке WiFi-соединений. Ваш компьютер получит IP-адрес этой сети, который будет выглядеть как «192.168.240.xxx». По умолчанию IP-адресом Seeeduino Cloud является «192.168.240.1».

Режим станции WiFi

После подключения к «SeeeduinoCloud-AXXXX» впишите в браузере «172.31.255.254» или «192.168.240.1», и вы подключитесь к веб-интерфейсу Seeeduino Cloud. Пароль по умолчанию – «seeeduino». Затем кликните на кнопку «LOG IN».

Далее кликните на «SYSTEM», выберите свою WiFi-сеть, введите пароль и кликните на «CONFIGURE & RESTART».

Встроенный Ethernet

Если подключить Seeeduino Cloud к проводной сети при помощи Ethernet-кабеля, она попробует автоматически подключиться при помощи DHCP. В этом случае плата будет отображаться в меню портов так же, как и при подключении по WiFi.

Терминал

Кроме того, вы можете получить доступ к терминалу Seeduino Cloud через SSH. Это позволит вам программировать и настраивать ATHEROS AR9331.

username: root
password: seeeduino

Библиотека Yun Bridge

Эта библиотека упрощает коммуникацию между Seeeduino и Dragino HE. Команды Bridge от AVR интерпретируются Python’ом, установленным на модуль HE. Его роль в том, чтобы:

  • выполнять программы на GNU/Linux, когда об этом попросит AVR
  • обеспечивать общую память для обмена данными (вроде данных, считанных с датчиков) между Seeeduino и интернетом
  • получать команды из интернета и передавать их напрямую Seeeduino

Подробное описание библиотеки Bridge, а также несколько скетчей-примеров можно найти тут. Ниже – несколько примеров использования библиотеки Bridge.

Пример 1: Скажи «Привет!» Linux

Скетч ниже – обмен приветствиями между Arduino и Seeediono Cloud. Пример можно открыть, кликнув в IDE Arduino на Файл > Примеры > Bridge > ConsoleRead (File > Examples > Bridge > ConsoleRead). Руководство по этому скетчу можно найти тут.

#include <Console.h>

String name;

void setup() {
    // инициализируем консоль и ждем открытия порта:
    Bridge.begin();
    Console.begin();

    // ждем подключения консольного порта:
    while (!Console);

    Console.println("Hi, what's your name?");
                //  "Привет, как тебя зовут?"
}

void loop() {
    if (Console.available() > 0) {
        char c = Console.read();  //  считываем следующий 
                                  //  присланный символ
        // ищем символ новой строки (это последний символ в строке):
        if (c == '\n') {
            //  печатаем текст с присланным именем:
            Console.print("Hi ");  //  "Привет "
            Console.print(name);
            Console.println("! Nice to meet you!");
                       //   "! Рад встрече!"
            Console.println();
            // еще раз спрашиваем имя и стираем старое имя:
            Console.println("Hi, what's your name?");
                        //  "Привет, как тебя зовут?"

            name = "";  //  очищаем строку с именем
        }
        else {       //  если буфер пуст, Console.read() вернет «-1»
            name += c; //  объединяем считанный символ из консоли 
                       //  со строкой, хранящей имя
        }
    }
}

Пример 2: Загрузка данных на сервер для интернета вещей

Этот скетч-пример показывает, как записывать логи на публичный сервер «Xively», предназначенный для интернета вещей. Этот скетч является модифицированной версией (чтобы адаптировать скетч для другой платы Arduino и включить отладку через WiFi, поменяйте Serial на Console) скетча, который можно открыть в IDE Arduino, кликнув на Файл > Примеры > Bridge > XivelyClient (File > Examples > Bridge > XivelyClient). Перед загрузкой скетча убедитесь, что…

  • Seeeduino Cloud имеет доступ к интернету
  • В скетче указаны ID «фида» и ключ API, причем ключ API должен быть закрыт в двойные кавычки
/*
 Клиент, передающий строки на сервер Xively

 Этот скетч использует Arduino Yun, чтобы подключить
 аналоговый датчик к серверу Xively
 
 Создан 15 марта 2010,
 модифицирован 27 мая 2013 Томом Иго (Tom Igoe)

 http://arduino.cc/en/Tutorial/YunXivelyClient

 */
#include <Process.h>
#include "passwords.h"      // содержит мои пароли (см. ниже)

/*
Примечание: Файла «passwords.h» в этом репозитории нет, 
потому что он содержит мои пароли. Вам нужно будет создать 
собственную версию этого файла. Чтобы сделать это, 
откройте в IDE Arduino новую вкладку, назовите ее «passwords.h»,
а затем впишите туда следующие переменные и константы:

 #define APIKEY        "foo"         // для API-ключа Pachube
 #define FEEDID        0000          // для ID «фида»
 #define USERAGENT     "my-project"  // для названия проекта
 */

// задаем сетевую информацию для клиента:
const unsigned long postingInterval = 60000;  //  задержка между 
                                              //  апдейтами xively.com
unsigned long lastRequest = 0;  //  время, когда был выполнен 
                                //  последний запрос
String dataString = "";

void setup() {
    // запускаем последовательный порт:
    Bridge.begin();
    Serial.begin(9600);

    while (!Serial);  //  ждем открытия последовательного порта
    Serial.println("Xively client");  //  "Клиент Xively"

    // сразу же делаем первый запрос:
    updateData();
    sendData();
    lastRequest = millis();
}

void loop() {
    //  извлекаем временную метку, чтобы можно было рассчитать
    //  интервалы для считывания и отправки данных:
    long now = millis();

    //  если время отправочного интервала исчерпалось,
    //  подключаемся снова и отправляем данные:
    if (now - lastRequest >= postingInterval) {
        updateData();
        sendData();
        lastRequest = now;
    }
}

void updateData() {
    // конвертируем данные в строку и отправляем их:
    dataString = "Temperature,";  //  "Температура,"
    dataString += random(10) + 20;
    // добавляем данные о давлении:
    dataString += "\nPressure,";  //  "\nДавление,"
    dataString += random(5) + 100;
}

// эта функция осуществляет HTTP-соединение к серверу:
void sendData() {
    // делаем строку для API-ключа:
    String apiString = "X-ApiKey: ";
    apiString += APIKEY;

    // делаем строку для URL:
    String url = "https://api.xively.com/v2/feeds/";
    url += FEEDID;
    url += ".csv";

    // отправляем запрос HTTP PUT:
 
    // класс Process лучше объявить тут – чтобы после 
    // завершения функции sendData() ресурсы сразу же освободились;
    // впрочем, можно объявить его и глобально – это тоже сработает:
    Process xively;
    Serial.print("\n\nSending data... ");  
             //  "\n\Отправка данных... "
    xively.begin("curl");
    xively.addParameter("-k");
    xively.addParameter("--request");
    xively.addParameter("PUT");
    xively.addParameter("--data");
    xively.addParameter(dataString);
    xively.addParameter("--header");
    xively.addParameter(apiString);
    xively.addParameter(url);
    xively.run();
    Serial.println("done!");  //  "готово!"

    // если через интернет-соединение пришли какие-то данные,
    // отправляем их на Serial:
    while (xively.available() > 0) {
        char c = xively.read();
        Serial.write(c);
    }
}

Пример 3: Запись логов на USB-флэшку

Этот скетч аналогичен тому, о котором рассказывается тут. Там же можно найти его исходный код. Seeeduino Cloud автоматически монтирует USB-флэшку в директорию «/mnt/sda1». Скетч добавляет данные от датчика в файл «/mnt/sda1/data/datalog.csv», поэтому перед запуском скетча убедитесь, что на USB-флэшке есть такой файл.

#include <FileIO.h>     // класс FileIO позволяет оперировать
                        // с файловой системой Linux
#include <Console.h>    // класс Console обеспечивает взаимодействие
                        // между IDE Arduino и Yun Shield
void setup() {
    // инициализируем консоль:
    Bridge.begin();
    Console.begin();
    FileSystem.begin();
    while(!Console);   // ждем подключения последовательного порта
    Console.println("Filesystem datalogger\n");
                //  "Запись логов в файловую систему"
}
void loop () {
    // делаем строку, которая начинается с временной отметки, 
    // чтобы собрать данные в форму логов:
    String dataString;
    dataString += getTimeStamp();
    dataString += " , ";
    // считываем данные с трех датчиков и добавляем их в строку:
    for (int analogPin = 0; analogPin < 3; analogPin++) {
        int sensor = analogRead(analogPin);
        dataString += String(sensor);
        if (analogPin < 2) {
            dataString += ",";    // разделяем значения запятой        }
    }
    // открываем файл; обратите внимание, что одновременно 
    // можно открыть только один файл, т.е. вам нужно сначала 
    // закрыть этот файл перед тем, как открыть другой;
    // по умолчанию USB-Флэшка монтируется в «/mnt/sda1»:
    File dataFile = FileSystem.open("/mnt/sda1/data/datalog.csv", FILE_APPEND);
    // если файл доступен, записываем в него:
    if (dataFile) {
        dataFile.println(dataString);
        dataFile.close();
        // также печатаем в последовательный порт:
        Console.println(dataString);
    }
    // если файл не открыт, выдаем ошибку:
    else {
        Console.println("error opening datalog.csv");
                    //  " ошибка при открытии datalog.csv"
    }
    delay(15000);   //  делаем запись логов каждые 15 секунд
}
//  функция getTimeStamp() возвращает строку с временной отметкой;
//  Yun Shield вызовет Linux-команду «date» и извлекает
//  временную отметку:
String getTimeStamp() {
    String result;
    Process time;
    // «date» - это утилита командной строки для извлечения 
    // даты и времени; формат данных задается с помощью
    // опционального параметра:
    time.begin("date");
    time.addParameter("+%D-%T");   // параметр «D» для «мм/дд/гг»
                                   // параметр «T» для «чч:мм:сс»           
    time.run();   //  запускаем команду
    //  считываем данные, которые вернула команда «date»:
    while(time.available()>0) {
        char c = time.read();
        if(c != '\n')
        result += c;
    }
    return result;
}

Настройка сервера для интернета вещей

Страница этого сервера позволяет загружать данные на сайты вроде Xively, с помощью которых можно управлять устройствами, подключенными к интернету. Вам нужно лишь передавать данные от датчиков на последовательный порт.

Скетч показан ниже:

/*
  Симуляция TX-данных, передаваемых на UART

  Этот скетч симулирует данные о температуре и влажности,
  чтобы передать их на UART.

  Цель скетча – тестирование передачи данных через UART
  для разных сервисов интернета вещей.

  Создан 25 апреля 2014 года Dragino Technology Co., Limited

  Ссылка:   
   http://wiki.dragino.com/index.php?title=Xively#Upload_data_to_Xively_use_Pass_Through_Mode

 */
String dataString = "";

void setup() {
    Serial1.begin(115200);
}

void loop() {
    dataString = "temp:";
    dataString += random(10) + 20;
    Serial1.println(dataString);   // загружаем температурные данные
    delay(20000);
    dataString = "humidity:";
    dataString += random(5) + 70;  // загружаем данные влажности
    Serial1.println(dataString);
    delay(20000);
}

Полезные ссылки

Схема

Прошивка

Другое

См.также

Внешние ссылки