Отправка данных с ардуино на компьютер

Arduino Ethernet Shield на базе W5100 enc28j60

Модули и шилды Ethernet для Arduino – это один из самых простых способов организовать подключение к интернету в ардуино проекте. В этой статье расскажем о том, как организовать выход в интернет и управление платой Arduino на расстоянии при помощи шилдов Ethernet Shield, опишем основные характеристики модулей на базе w5100 enc28j60. Мы узнаем, как подключиться через SPI, как написать скетч для создания своего сервера на Arduino или отправки данных на удаленный сервер.

Подключить плату arduino к интернету можно несколькими способами. Беспроводное подключение прекрасно организуется с использованием платформ ESP8266 или ESP32. Можно использовать Lora модули с соответствующими WiFi-шлюзами. Но самым помехоустойчивым и “традиционным” является старый добрый Ethernet. Используя обычный RJ45 разъем и витую пару вы сможете объединить вашу плату с другим сетевым оборудованием, будь то роутер, маршрутизатор или тот же WiFi модем. Преимущества Ethernet-подключения – скорость, стабильность, бОльшая защищенность от помех. Недостатки очевидны – оборудование привязывается проводом, причем в условиях реальной эксплуатации качество этого провода должно быть высоким.

Плата расширения Arduino Ethrnet Shield

Наиболее популярные Ethernet модули для ардуино сегодня выпускаются на основе микросхемы wiznet w5100, которая способна поддерживать обмен данными с постоянной скоростью в 100 Мбит/сек. Для устройств на базе w5100 написаны готовые библиотеки, данная архитектура является простой и идеально подойдет начинающим любителям электроники, которые могут использовать как стартовую площадку для последующих проектов.

Ключевые характеристики модулей на базе W5100:

  • Рабочее напряжение – 5 Вольт, подходит питание с платы Arduino.
  • Внутренний буфер 16 Кб.
  • Скорость соединения достигает значения в 10/100 Мбит/сек.
  • Связь с платой ардуино осуществляется посредством порта SPI.
  • W5100 поддерживает TCP и UDP.

Варианты модулей на базе других микросхем:

  • Модуль на базе Wiznet W5500. Имеет меньшие размеры, меньше греется, имеет большую мощность.
  • Модуль на базе enc28j60. Это гораздо более бюджетный вариант, дешевле W5100, но и потенциальных проблем с ним может возникнуть больше.

Исходные файлы проекта

Исходные файлы проекта (HTM, CSS, JS, PDE) хранятся в папке arduino_serial_commander . Эта же папка содержит файлы скетча самого Arduino Serial Commander, что не очень удобно и в будущем планируется перенести файлы проекта в отдельную папку.

  • FAA — начало передачи имени файла
  • FBB — окончание передачи имени файла
  • GOO — начало передачи файла
  • ?Z? — окончание передачи файла
  • E1R — начало передачи защитного блока
  • E2R — конец передачи защитного блока

Передача файла начинается с посылки маркера FAA (начало передачи имени файла) утилитой ASC в Serial интерфейс. При обнаружении этого маркера, сервер переходит в режим приёма файлов и в этот момент блокируется вся активность Arduino Mega Server. Сервер начинает записывать поток, пока не встретит маркер FBB (окончание передачи имени файла).

Затем посылается маркер GOO (начало передачи файла) и поток, передаваемый по Serial интерфейсу, начинает записывается на microSD карту памяти сервера под именем файла, переданным ранее. Запись потока происходит до тех пор, пока в потоке не встретится маркер ?Z? (окончание посылки файла). После получения этого маркера файл на карте памяти закрывается и сервер AMS переходит в нормальный режим работы.

Получение данных отправленных из «Монитора порта» в Arduino

Теперь мы попробуем получить команды, отправленные из монитора порта в Arduino и использовать их, например, для включения или выключения светодиода.

Поможет нам с этим все тот же класс Serial и его метод readString.

И так по команде «HIGH» мы будем включать светодиод, а по команде «LOW» будем выключать.

Для того чтобы отправить команду, необходимо в поле расположенном в верхней части формы набрать текст, и нажать кнопку «Отправить». Получать команды мы будем при помощи упомянутого метода readString.

Итого у Вас должно получиться следующее.

Вот так, без особых мучений можно создать N-е количество команд и обрабатывать их в Arduino.

Ну а далее о формате передачи данных.

Как это работает

Программный последовательный порт имитирует стандартный последовательный порт на различных цифровых выводах Arduino. Это довольно удобно в целом, но нужно понимать, что это программная имитация, не поддержанная аппаратно. Это означает, что при этом тратятся общие ресурсы контроллера, в частности время выполнения цикла программы и памяти. А вообще, оно работает просто как обычный последовательный порт. Все функции, присутствующие в нормальном последовательном порте также присутствуют и в программном.

Для начала взглянем на программу мастера, который получает команды по обычному последовательному порту с компьютера и отправляет подчиненному контроллеру. В начале кода мы подключаем библиотеку SoftwareSerial.h

Дальше нам нужно объявить объект нашей библиотеки. Это делается соответственно следующему синтаксису:

SoftwareSerial softSerial(8, 9); // RX, TX

При этом будет вызвана параллельная связь, в данном случае программная. Она будет использовать вывод 8 для чтения (RX) и вывод 9 для передачи (TX). Далее подробнее остановимся на том, какие именно выводы следует выбирать.

Используя объявленный объект библиотеки, мы можем использовать все функции, характерные для обычного аппаратного параллельного порта, такие как softSerial.read(), softSerial.write() и так далее. В следующей части кода мы проверяем пришло ли что-нибудь с аппаратного порта. И если что-то пришло, мы считываем это и отправляем в программный порт:

В коде подчиненного контроллера использована самая простая реализация управления светодиодом командами через последовательный порт с одной только разницей, что тут используются команды с программного порта. Меняется только синтаксис и вместо привычных функций Serial.read(), Serial.available() и так далее нужно писать softSerial.read() и softSerial.available().

Программный UART имеет некоторые важные ограничения и недостатки. Вот некоторые из них.

Victor

Administrator

Если совсем не хотите отказываться от Arduino UNO как устройства, то разработать собственный протокол обмена данными между Arduino UNO и ESP8266, в ESP8266 скетч будет из двух логических частей: прием от Arduino и отправка данных по WiFi куда вам нужно.
Более логичный вариант: использовать ESP8266 и как контроллер и как WiFi без Arduino UNO, тогда протокол обмена уже не нужен: берем данные и отправляем.

Но сначала вам нужно еще почитать и понять как все работает. Вы скетч свой заливали в Arduino UNO, а библиотеку [inline]ESP8266wifi.h[/inline] для ESP8266 использовали. Смысл этой библиотеки в том, что с помощью Arduino IDE и ESP8266 Community edition скетч заливается прямо в esp8266 и заменяет существующую в ней прошивку на свою, состоящую из вашего скетча и SDK. А Arduino, как устройство не используется вообще.
http://esp8266.ru/arduino-ide-esp8266/

Функция serialEvent()

Функция serialEvent() — это специальная функция, такая же, как loop() или setup(), которая вызывается в тот момент, когда в буфер последовательного порта попадет информация. Она позволяет выполнять действия независимо от текущего выполнения кода. Как правило, эта функция содержит инструкции для чтения данных из последовательного порта. Пример использования serialEvent() приведен ниже:

ВНИМАНИЕ. В соответствии с документацией Arduino данная функция не поддерживается в системах Esplora, Leonardo и Micro.

От Arduino к Processing.

Давайте начнем со стороны Arduino. Нам надо ознакомиться с основами настройки Arduino скетча для передачи данных на персональный компьютер по серийному порту.

  • Естественно, для работы вам понадобится Arduino IDE. Скачать ее можно на на официальном сайте Arduino.
  • Кроме того, вам нужна плата Arduino, подключенная к персональному компьютеру через USB.

Ок. Контроллер у вас есть, Arduino IDE установлена. Начинаем кодить! Не волнуйтесь, поставленные перед нами задачи реализуются достаточно легко.

Откройте Arduino IDE. Вы должны увидеть что-то вроде:

От Arduino к Processing 1

Белое пространство — это место, в котором мы будем писать нашу программу. Кликните мышкой по белому пространству и пропишите следующее (или просто скопируйте и вставьте код, который приведен ниже):

Serial.begin(9600); //инициализируем обмен данными по серийному протоколу со скоростью 9600 baud

Это наш метод setup. Именно в пределах этого метода мы обеспечиваем обмен данными между компьютером и Arduino с указанной скоростью. Baund — это (по сути) скорость, с которой мы передаем данные на персональный компьютер. Если мы отправляем и получаем данные с различной скоростью, ничего хорошего в результате не получится. Два устройства, которые обмениваются данными, просто не поймут друг друга. Это, конечно же, плохо.

После метода setup() нам понадобится метод под названием loop()с помощью которого мы обеспечим бесконечный повтор работы нашей программы. В качестве первого примера мы просто отправим строку ‘Hello, world!’ по серийному порту. Причем отправляться она будет вновь и вновь и вновь. Пока мы не отключим Arduino. Ниже представлен код этой программы:

Serial.println(«Hello, world!»); //ждем 100 миллисекунд перед следующей отправкой

Это все, что потребуется со стороны Arduino для первого примера. Мы настраиваем обмен данными по серийному протоколу и ставим задачу отправлять данные каждые 100 миллисекунд. Ваш скетч для Arduino будет выглядеть примерно так:

От Arduino к Processing 2

Все, что нам осталось — подключить Arduino, выбрать тип платы (в меню Tools -> Board Type) и ваш серийный порт (Tools -> Serial Port). После этого нажмите кнопку ‘upload’ для загрузки вашего кода на Arduino.

Теперь мы сможем магическим образом (или с помощью отдельного кода) обнаружить нашу строку ‘Hello, world!’ с помощью Processing.

Пишем первую программу

Вместо всем привычных Hello World’ов в Arduino принято запускать скетч Blink, который можно найти в ФайлПримеры01.BasicsBlink. Там же можно найти множество других учебных скетчей на разные темы.

Почти на всех платах размещён светодиод, номер пина которого содержится в переменной LED_BUILTIN . Его можно использовать в отладочных целях. В следующем скетче будет рассмотрен пример управления таким светодиодом.

Рассмотрим скетч Blink:

Basic Knowledge of Web Client and Web Server

When you access a website from your PC or smartphone, you just type the web address (URL) on a web browser, waits for a second, and then the webpage is displayed on your PC/smartphone. You do not know what your PC/smartphone does behind the screen. So, what happens behind the screen:

In this tutorial, We will make Arduino become a web client to do something similar to your PC/smartphone.

Web Address (URL)

An URL includes two parts: hostname and pathname. The hostname can be replaced by the IP address of the web server. For example: example.com /test

In HTTP GET request, URL can includes the query string . For example: example.com /test ?temperature=20&humidity=70 .

Query String

The query string is a set of name-value pairs, which are included in HTTP request to send data from web client to web server.

The name and value is separated by «=» character. The name-value pairs are separated by «&» character.

For example: temperature=26&humidity=70&state=2

HTTP Request

The HTTP request is composed of:

HTTP request header and HTTP request body is seperated by two pair of a carriage return character (ASCII 13, or ‘r’) and a newline character (ASCII 10, or ‘n’).

There are many request method. Among them, there are two popular methods: GET and POST.

Usually, we use GET method when we want to get data from web server, and use POST method to send data to web server. However, GET method can be used for either get and send data from/to webserver

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector