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

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1852 статей для сайта.

Контакты:

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


Ambox content.png Черновик


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. }

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

Схема

Прошивка

Другое

См.также

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

  1. wiki.seeed.cc - Seeeduino Cloud