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

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

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Seeeduino Cloud[1]

Seeeduino cloud cover.jpg

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.

Seeeduino cloud hardware.png
  • 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).

UNO Load Blink.jpg

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

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

YUN SelBoard.jpg

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

YUN SelPort.jpg

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

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

UNO Upload.png

Спустя несколько секунд после загрузки на плате должен замигать зеленый светодиод (он подключен к контакту 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».

Seeeduino cloud login.png

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

Seeeduino cloud sta.png

Встроенный Ethernet

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

Терминал

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

username: root
password: seeeduino
Seeeduino cloud terminal.png

Библиотека 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). Руководство по этому скетчу можно найти тут.

 1 #include <Console.h>
 2 
 3 String name;
 4 
 5 void setup() {
 6     // инициализируем консоль и ждем открытия порта:
 7     Bridge.begin();
 8     Console.begin();
 9 
10     // ждем подключения консольного порта:
11     while (!Console);
12 
13     Console.println("Hi, what's your name?");
14                 //  "Привет, как тебя зовут?"
15 }
16 
17 void loop() {
18     if (Console.available() > 0) {
19         char c = Console.read();  //  считываем следующий 
20                                   //  присланный символ
21         // ищем символ новой строки (это последний символ в строке):
22         if (c == '\n') {
23             //  печатаем текст с присланным именем:
24             Console.print("Hi ");  //  "Привет "
25             Console.print(name);
26             Console.println("! Nice to meet you!");
27                        //   "! Рад встрече!"
28             Console.println();
29             // еще раз спрашиваем имя и стираем старое имя:
30             Console.println("Hi, what's your name?");
31                         //  "Привет, как тебя зовут?"
32 
33             name = "";  //  очищаем строку с именем
34         }
35         else {       //  если буфер пуст, Console.read() вернет «-1»
36             name += c; //  объединяем считанный символ из консоли 
37                        //  со строкой, хранящей имя
38         }
39     }
40 }

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

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

  • Seeeduino Cloud имеет доступ к интернету
  • В скетче указаны ID «фида» и ключ API, причем ключ API должен быть закрыт в двойные кавычки
  1 /*
  2  Клиент, передающий строки на сервер Xively
  3 
  4  Этот скетч использует Arduino Yun, чтобы подключить
  5  аналоговый датчик к серверу Xively
  6  
  7  Создан 15 марта 2010,
  8  модифицирован 27 мая 2013 Томом Иго (Tom Igoe)
  9 
 10  http://arduino.cc/en/Tutorial/YunXivelyClient
 11 
 12  */
 13 #include <Process.h>
 14 #include "passwords.h"      // содержит мои пароли (см. ниже)
 15 
 16 /*
 17 Примечание: Файла «passwords.h» в этом репозитории нет, 
 18 потому что он содержит мои пароли. Вам нужно будет создать 
 19 собственную версию этого файла. Чтобы сделать это, 
 20 откройте в IDE Arduino новую вкладку, назовите ее «passwords.h»,
 21 а затем впишите туда следующие переменные и константы:
 22 
 23  #define APIKEY        "foo"         // для API-ключа Pachube
 24  #define FEEDID        0000          // для ID «фида»
 25  #define USERAGENT     "my-project"  // для названия проекта
 26  */
 27 
 28 // задаем сетевую информацию для клиента:
 29 const unsigned long postingInterval = 60000;  //  задержка между 
 30                                               //  апдейтами xively.com
 31 unsigned long lastRequest = 0;  //  время, когда был выполнен 
 32                                 //  последний запрос
 33 String dataString = "";
 34 
 35 void setup() {
 36     // запускаем последовательный порт:
 37     Bridge.begin();
 38     Serial.begin(9600);
 39 
 40     while (!Serial);  //  ждем открытия последовательного порта
 41     Serial.println("Xively client");  //  "Клиент Xively"
 42 
 43     // сразу же делаем первый запрос:
 44     updateData();
 45     sendData();
 46     lastRequest = millis();
 47 }
 48 
 49 void loop() {
 50     //  извлекаем временную метку, чтобы можно было рассчитать
 51     //  интервалы для считывания и отправки данных:
 52     long now = millis();
 53 
 54     //  если время отправочного интервала исчерпалось,
 55     //  подключаемся снова и отправляем данные:
 56     if (now - lastRequest >= postingInterval) {
 57         updateData();
 58         sendData();
 59         lastRequest = now;
 60     }
 61 }
 62 
 63 void updateData() {
 64     // конвертируем данные в строку и отправляем их:
 65     dataString = "Temperature,";  //  "Температура,"
 66     dataString += random(10) + 20;
 67     // добавляем данные о давлении:
 68     dataString += "\nPressure,";  //  "\nДавление,"
 69     dataString += random(5) + 100;
 70 }
 71 
 72 // эта функция осуществляет HTTP-соединение к серверу:
 73 void sendData() {
 74     // делаем строку для API-ключа:
 75     String apiString = "X-ApiKey: ";
 76     apiString += APIKEY;
 77 
 78     // делаем строку для URL:
 79     String url = "https://api.xively.com/v2/feeds/";
 80     url += FEEDID;
 81     url += ".csv";
 82 
 83     // отправляем запрос HTTP PUT:
 84  
 85     // класс Process лучше объявить тут – чтобы после 
 86     // завершения функции sendData() ресурсы сразу же освободились;
 87     // впрочем, можно объявить его и глобально – это тоже сработает:
 88     Process xively;
 89     Serial.print("\n\nSending data... ");  
 90              //  "\n\Отправка данных... "
 91     xively.begin("curl");
 92     xively.addParameter("-k");
 93     xively.addParameter("--request");
 94     xively.addParameter("PUT");
 95     xively.addParameter("--data");
 96     xively.addParameter(dataString);
 97     xively.addParameter("--header");
 98     xively.addParameter(apiString);
 99     xively.addParameter(url);
100     xively.run();
101     Serial.println("done!");  //  "готово!"
102 
103     // если через интернет-соединение пришли какие-то данные,
104     // отправляем их на Serial:
105     while (xively.available() > 0) {
106         char c = xively.read();
107         Serial.write(c);
108     }
109 }
SeeeduinoCloud Sketch xively.png

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

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

 1 #include <FileIO.h>     // класс FileIO позволяет оперировать
 2                         // с файловой системой Linux
 3 #include <Console.h>    // класс Console обеспечивает взаимодействие
 4                         // между IDE Arduino и Yun Shield
 5 void setup() {
 6     // инициализируем консоль:
 7     Bridge.begin();
 8     Console.begin();
 9     FileSystem.begin();
10     while(!Console);   // ждем подключения последовательного порта
11     Console.println("Filesystem datalogger\n");
12                 //  "Запись логов в файловую систему"
13 }
14 void loop () {
15     // делаем строку, которая начинается с временной отметки, 
16     // чтобы собрать данные в форму логов:
17     String dataString;
18     dataString += getTimeStamp();
19     dataString += " , ";
20     // считываем данные с трех датчиков и добавляем их в строку:
21     for (int analogPin = 0; analogPin < 3; analogPin++) {
22         int sensor = analogRead(analogPin);
23         dataString += String(sensor);
24         if (analogPin < 2) {
25             dataString += ",";    // разделяем значения запятой        }
26     }
27     // открываем файл; обратите внимание, что одновременно 
28     // можно открыть только один файл, т.е. вам нужно сначала 
29     // закрыть этот файл перед тем, как открыть другой;
30     // по умолчанию USB-Флэшка монтируется в «/mnt/sda1»:
31     File dataFile = FileSystem.open("/mnt/sda1/data/datalog.csv", FILE_APPEND);
32     // если файл доступен, записываем в него:
33     if (dataFile) {
34         dataFile.println(dataString);
35         dataFile.close();
36         // также печатаем в последовательный порт:
37         Console.println(dataString);
38     }
39     // если файл не открыт, выдаем ошибку:
40     else {
41         Console.println("error opening datalog.csv");
42                     //  " ошибка при открытии datalog.csv"
43     }
44     delay(15000);   //  делаем запись логов каждые 15 секунд
45 }
46 //  функция getTimeStamp() возвращает строку с временной отметкой;
47 //  Yun Shield вызовет Linux-команду «date» и извлекает
48 //  временную отметку:
49 String getTimeStamp() {
50     String result;
51     Process time;
52     // «date» - это утилита командной строки для извлечения 
53     // даты и времени; формат данных задается с помощью
54     // опционального параметра:
55     time.begin("date");
56     time.addParameter("+%D-%T");   // параметр «D» для «мм/дд/гг»
57                                    // параметр «T» для «чч:мм:сс»           
58     time.run();   //  запускаем команду
59     //  считываем данные, которые вернула команда «date»:
60     while(time.available()>0) {
61         char c = time.read();
62         if(c != '\n')
63         result += c;
64     }
65     return result;
66 }
SeeeduinoCloud Sketch USB.png

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

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

SeeeduinoCloud IoTServer.png

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

 1 /*
 2   Симуляция TX-данных, передаваемых на UART
 3 
 4   Этот скетч симулирует данные о температуре и влажности,
 5   чтобы передать их на UART.
 6 
 7   Цель скетча – тестирование передачи данных через UART
 8   для разных сервисов интернета вещей.
 9 
10   Создан 25 апреля 2014 года Dragino Technology Co., Limited
11 
12   Ссылка:   
13    http://wiki.dragino.com/index.php?title=Xively#Upload_data_to_Xively_use_Pass_Through_Mode
14 
15  */
16 String dataString = "";
17 
18 void setup() {
19     Serial1.begin(115200);
20 }
21 
22 void loop() {
23     dataString = "temp:";
24     dataString += random(10) + 20;
25     Serial1.println(dataString);   // загружаем температурные данные
26     delay(20000);
27     dataString = "humidity:";
28     dataString += random(5) + 70;  // загружаем данные влажности
29     Serial1.println(dataString);
30     delay(20000);
31 }

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

Схема

Прошивка

Другое

См.также

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