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

Материал из Онлайн справочника
Версия от 01:58, 25 сентября 2017; Myagkij (обсуждение | вклад) (→‎Внешние ссылки)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

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


Seeeduino Ethernet[1]

Seeeduino Ethernet – это компактная и многофункциональная плата, спроектированная на базе микроконтроллера MEGA328P (позволяет работать с платой аналогично Arduino) и модуля Wiz5100 (обеспечивает Ethernet-коммуникацию при помощи протоколов TCP и UDP). Кроме того, Seeeduino Ethernet оснащена модулем для SD-карты, что делает ее подходящей для проектов, где используется запись логов, а также обработка данных и их передача по сети.

В новой версии, как пишут разработчики, был уменьшен вес разъема RJ45, чтобы уравновесить плату с гребешками контактов. Кроме того, плата оснащена двумя контроллерами Grove, обеспечивающими коммуникацию через I2C и UART.

Купить плату Seeeduino Ethernet можно по этой ссылке.

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

Как пользоваться

Этот раздел расскажет, как использовать Ethernet-функции Seeeduino для записи/считывания информации с SD-карты, а также отправлять по сети цифровые/аналоговые данные.

Шаг 1: Настройка оборудования

Сначала нужно подключить питание. Сделать это можно двумя способами.

Способ 1.

Воспользоваться одним комплектом пассивных PoE-кабелей (от «power over ethernet», что значит «питание по Ethernet»). Это позволит одновременно питать плату и обеспечить Ethernet-соединение с нею.

Подробнее смотрите на картинке ниже:

Способ 2.

Воспользоваться отдельными кабелями для питания и Ethernet-коммуникации.

Шаг 2: Программирование

Теперь давайте протестируем код. Ниже показан скетч, цель которого – протестировать функции записи и считывания данных с SD-карты, а также отправки аналоговых/цифровых данных по сети. Кроме того, этот скетч можно использовать в качестве отправной точки для тестирования других функций платы.

Примечания:

  1. Все заголовочные файлы (т.е. файлы с расширением «*.h») были предустановлены в IDE Arduino (1.0)
  2. Вставьте карту MicroSD. Убедитесь, что ее объем не израсходован, а также в том, что она отформатирована в FAT/FAT32. Форматирование лучше выполнить при помощи программы SD Formatter (ссылку на нее ищите ниже, в разделе «Полезные ссылки»)
/*
  
Считывание и запись данных на SD-карту

Этот скетч-пример показывает, как считывать и записывать данные
в файл, записанный на SD-карту.

Цепь:

* SD-карта, подключенная к шине SPI:
   * Контакт MOSI – к контакту 11
   * Контакт MISO – к контакту 12
   * Контакт CLK – к контакту 13
   * Контакт CS – к контакту 4

Веб-сервер

Простой веб-сервер, который показывает значения
на входных аналоговых контактах 
при помощи шилда Arduino Wiznet Ethernet Shield.

Цепь:

* Ethernet-шилд, подключенный к контактам 10, 11, 12 и 13
* Входные аналоговые контакты, 
  подключенные к контактам A0-A5 (опционально)

Создан 18 декабря 2009 года Дэвидом А. Меллисом (David A. Mellis),
модифицирован 4 сентября 2010 года Томом Иго (Tom Igoe).

*/

#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>

//  вводим MAC-адрес и IP-адрес своего контроллера;
//  IP-адрес зависит от вашей локальной сети:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

//  инициализируем библиотеку «EthernetServer»
//  при помощи IP-адреса и порта, которые мы хотим использовать
//  (порт 80 используется для HTTP по умолчанию):
EthernetServer server(80);

File myFile;

void setup()
{
    Serial.begin(9600);
    Serial.print("Initializing SD card...");
             //  "Инициализация SD-карты..."
    //  на Ethernet-шилде CS-контактом является контакт 4,
    //  и по умолчанию он выставлен в режим вывода данных (OUTPUT);
    //  если вы не используете CS-контакт, аппаратный SS-контакт
    //  (на большинстве Arduino это контакт 10, на Mega – контакт 53),
    //  все равно нужно выставить на OUTPUT,
    //  иначе функции библиотеки «SD» просто не будут работать:
    pinMode(10, OUTPUT);
    // pinMode(4,OUTPUT);
    if (!SD.begin(4)) {
        Serial.println("initialization failed!");
                   //  "Инициализация не удалась!"
        return;
    }
    Serial.println("initialization done.");
              //  "Инициализация прошла успешно."

    //  откройте файл; одновременно может быть открыт 
    //  только один файл, поэтому перед открытием нового файла
    //  нужно закрыть предыдущий:

    myFile = SD.open("test.txt",FILE_WRITE);
    // если файл открыт или создан, то все окей, пишем на него:
    if (myFile) {
        Serial.print("Writing to test.txt...");
                 //  "Запись на test.txt..."
        myFile.println("testing 1, 2, 3.");
                   //  "проверка 1, 2, 3."
        // закрываем файл:
        myFile.close();
        Serial.println("done.");  //  "готово."

    } else {
        // если файл не открыт, сообщаем об ошибке:
        Serial.println("error opening test.txt");
                   //  "ошибка с открытием test.txt"

    }

    // снова открываем файл – на этот раз для чтения:
    myFile = SD.open("test.txt");
    if (myFile) {
        Serial.println("test.txt:");

        // читаем файл, пока не дойдем до конца:
        while (myFile.available()) {
            Serial.write(myFile.read());
        }
        // закрываем файл:
        myFile.close();
    } else {
        // если файл не открыт, сообщаем об ошибке:
        Serial.println("error opening test.txt");
                   //  "ошибка с открытием test.txt"
    }
    // запускаем Ethernet-коммуникацию и сервер:
    Ethernet.begin(mac, ip);
    server.begin();
}
unsigned char buff[6];
void loop()
{
    EthernetClient client = server.available();
    if (client) {
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();
                //  если дошли до конца строки 
                //  (т.е. получили символ новой строки),
                //  и эта строка пуста, то это значит,
                //  что мы достигли конца HTTP-запроса;
                //  следовательно, можно отправлять ответ:
                if (c == '\n' && currentLineIsBlank) {
                    //  отправляем заголовок стандартного HTTP-ответа: 
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println();

                    //  показываем значение 
                    //  всех входных аналоговых контактов:
                    for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
                        client.print("analog input ");
                                 //  "входной аналоговый контакт " 
                        client.print(analogChannel);
                        client.print(" is "); 
                                 //  " имеет значение "
                        client.print(analogRead(analogChannel)); 
                        client.println("<br />");
                        buff[analogChannel] = analogRead(analogChannel);
                    }
                    break;
                }
                if (c == '\n') {
                    // начинаем новую строчку:
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // на текущей строчке есть символ:
                    currentLineIsBlank = false;
                }
            }
        }
        // даем веб-браузеру время на прием данных:
        delay(1);
        // закрываем соединение:
        client.stop();
        myFile = SD.open("test.txt", FILE_WRITE);
        if (myFile) {
            Serial.println("test.txt:");
            for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
                myFile.print("analog input ");
                         //  "входной аналоговый контакт " 
                myFile.print(analogChannel);
                myFile.print(" is ");
                         //  " имеет значение "
                myFile.println(analogRead(analogChannel));
            }
            //  читаем файл, пока не прочитаем все содержимое:
            myFile.close();
        }
        else {
            //  если файл не открыт, сообщаем об ошибке:
            Serial.println("error opening test.txt");
                       //  "ошибка с открытием test.txt"
        }

        myFile = SD.open("test.txt");
        if (myFile) {
            Serial.println("test.txt:");

            //  читаем файл, пока не прочитаем все содержимое:
            while (myFile.available()) {
                Serial.write(myFile.read());
            }
            //  закрываем файл:
            myFile.close();
        }
        else {
            //  если файл не открыт, сообщаем об ошибке:
            Serial.println("error opening test.txt");
                       //  "ошибка с открытием test.txt"
        }
    }
}

Шаг 3. Загрузка программы

Поскольку Seeeduino Ethernet не оснащена USB-коннектором, чтобы загрузить на нее скетч, нужно воспользоваться UartSBee (это адаптер USB-Serial).

Подключите UartSBee к Seeeduino Ethernet как показано на картинке ниже:


Шаг 4. Проверка результата

Убедитесь, что Seeeduino Ethernet и ваш ПК находятся в одной и той же локальной сети. Загрузив программу, откройте в IDE Arduino монитор порта. В нем должна появиться следующая информация:

Откройте браузер и введите в адресной строке веб-адрес «192.168.1.177». Откроется страница веб-сервера, через которую можно проверять данные, которые отправляет Seeeduino Ethernet:

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

См.также

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