• Главная
  • Карта сайта
Не найдено

HTTP / TCP на Аtmega88 микроконтроллере (AVR веб сервер)

Тепер, замість використання програми з командного рядка і посилки UDP пакетів до Ethernet пристрою, ми можемо просто налаштувати на нього наш web браузер. До програми додався тільки web сервер, і вся заснована на UDP функціональність збереглася. Можна використовувати обидві можливості.

Програма написана на Сі і в пам'яті мікроконтролера залишилося ще багато вільного місця.

Вступ

Командний інтерфейс UDP цілком достатній для більшості додатків, але інтегрований web сервер набагато більш універсальний і простий у використанні. Як зробити web сервер на мікроконтролері Atmega88?

Перш ніж взятися за цей Ethernet проект, я зрозуміло, зробив деякий моделювання, і вже тоді я помітив, що UDP не створить проблем з нестачею місця в пам'яті мікроконтролера Atmega88. Я був цілком упевнений, що і TCP + http буде працювати. TCP / IP був винайдений більше 25 років тому. Зараз мікроконтролери забезпечують майже ту саму обчислювальну потужність, як у комп'ютерів тих часів. У ті роки не використовувалися не java НЕ xml, все робилося простими і ефективними шляхами.

Таким чином ми маємо цілком реальний web сервер на мікроконтролері Atmega88.

TCP повністю автоматичний

TCP це протокол, в якому встановлюється з'єднання. Для цього спочатку повинен відбутися обмін безліччю пакетів, і обидві сторони з'єднання повинні пройти через кілька станів [дивіться TCP повністю автоматичний в rfc793]. Після того, як з'єднання було встановлено, безліч пакетів даних може бути послано. Лічильники і автомат TCP гарантують, що дані прибудуть в правильному порядку і без втрат.

Великі web сторінки можуть зажадати посилки безлічі пакетів даних, маленькі сторінки - менше. Як багато повинні посилати ми?

Давайте подивимося на програму, представлену в першій статті . У цій статті ми всього лише перемикали реле через Ethernet. Це можна було зробити, використовуючи просту web сторінку, подібну до цієї:

Малюнок 1. Приклад web сторінки для Ethernet пристрою віддаленого перемикання.

В інших додатках може бути реалізовано вимір температури або тиску повітря. Для всіх цих додатків будуть потрібні маленькі web сторінки з невеликою кількістю даних. Іншими словами, посилки менше 100 байт даних буде цілком достатньо для всього, включаючи всі html теги.

Як багато пакетів даних має бути надіслане для такої сторінки?

Всього один!

Особливість використання TCP в тому, що один з учасників з'єднання може посилати більше одного пакета даних, але нам не потрібна така функціональність. Нам потрібен TCP, лише тому, що HTTP базується на ньому, а ми хочемо використовувати HTTP.

Беручи до уваги те, що нам не доведеться посилати більше одного пакета даних, весь TCP протокол разом з механізмом управління з'єднанням може бути істотно спрощений. Ми можемо, таким чином, посилати пакет FIN негайно, разом з даними. Це дуже сильно спрощує механізм управління з'єднанням при його закритті.

З урахуванням всього цього, цілком можливо здійснити web сервер в Atmega88, при цьому не менше 50% пам'яті контролера залишається вільною.

Віддалене Ethernet пристрій з вбудованим web сервером: включення і виключення чого ні будь

Програма в пакеті eth_rem_dev_tcp-2.X реалізує простий перемикач. З його допомогою ви можете що ні будь включати або вимикати. Простий механізм пароля забезпечує дуже просту захист, не дозволяючи авторизованим користувачам вмикати.

Нижче представлений знімок екрана з web сторінкою, згенерованої пристроєм:

Малюнок 2. Вбудований в Atmega88 web сервер, знімок екрана з браузером mozilla firefox.

Web - сервер на мікроконтролері, який посилає єдиний пакет даних

Код доступний в кінці статті і я коротко поясню його. Сподіваюся, після цього ви будете здатні модифікувати його і адаптувати для інших застосувань. Наш web сервер з одним пакетом даних при роботі проходить наступні стану TCP.

  1. прийом SYN
  2. Відправка SYN, ACK
  3. Прийом ACK (зараз з'єднання встановлено)
  4. Прийом ACK з HTTP командою GET
  5. Відправка ACK
  6. Відправка FIN, ACK з даними HTTP (код 200 ОК)
  7. Прийом FIN? ACK
  8. Відправка ACK

Легко помітити, що це досить таки проста послідовність команд і дій. Всі необхідні функції я реалізував в файлі ip_arp_udp_tcp.c. У файлі main.c реалізований цикл прийому даних. У цьому циклі є безліч умовних переходів, в порядку того, яка мета повинна бути виконано. Тут ви також можете побачити, як код розгалужується між UDP і TCP з портом 80 (web сервер). Якщо ви захочете здійснити вашу власну функціональність (наприклад, зчитувати дані з датчиків температури, тиску повітря, чого завгодно ...), вам буде потрібно тільки змінити код перед викликом функції print_webpage і код самої функції print_webpage, так, щоб вона генерувала вашу власну web сторінку. Цей код знаходиться в файлі main.c. Файл enc28j60.c реалізує драйвер для мікросхеми Ethernet контролера enc28j60. Вам не слід турбуватися з приводу файлу enc28j60.c.

малюнок 3

Ви можете отримати web сервер, просто завантаживши нову програму в мікроконтролер.

Створення та завантаження програми в мікроконтролер

Розпакуйте пакет eth_rem_dev_tcp-2.X (командою tar -zxvf eth_rem_dev_tcp-2.X щоб розпакувати, завантажити програму можна в кінці статті). Докладні інструкції є в файлі README включеному в пакет eth_rem_dev_tcp-2.X.

Потім вам треба задати IP адреса для вашого пристрою. Для цього відредагуйте 3 рядки в файлі main.c:

static uint8_t mymac [6] = {0x54,0x55,0x58,0x10,0x00,0x24};
static uint8_t myip [4] = {10,0,0,24};
static char baseurl [] = "http://10.0.0.24/";

Для першого пристрою вам не знадобитися міняти рядок з mymac. Але вам ймовірно буде потрібно змінити IP адресу (параметр myip). Це повинен бути вільний адресу з діапазону адрес вашої мережі.

(Якщо все ж ви вирішили використовувати звернення до пристрою по імені, а не по IP адресою, третю сходинку слід також змінити, прописавши в ній замість адреси ім'я пристрою:

static char baseurl [] = "http: // ІМ'Я /";

прим. перев).

Тут представлений діапазон приватних IP адрес (НЕ маршрутизованих в інтернеті), які ви можете використовувати:

Маска підмережі Мережеві адреси

255.0.0.0 10.0.0.0 - 10.255.255.255
255.255.0.0 172.16.0.0 - 172.31.255.255
255.255.255.0 192.168.0.0 - 192.168.255.255

Наприклад: ваш WIFI маршрутизатор може мати IP адресу 192.168.1.1, ваш комп'ютер може мати адресу 192.168.1.12. це означає, що ви можете використовувати адресу 192.168.1.10 і залишити деякий діапазон адрес для інших комп'ютерів в мережі. Якщо ви використовуєте в мережі протокол DHCP, перевірте, щоб цей адреса не дублювався в мережі (виключіть його з діапазону DHCP).

Тепер скомпілюйте програму командою "make", завантажте файл eth_rem_dev.hex в мікроконтролер. Відкрийте web браузер і наберіть в адресному рядку: http: // Ваш_IP_адрес / secret.

Леко ;-)

продуктивність

Вбудовані системи зазвичай маленькі, маленькі не тільки фізично, але також в сенсі обсягу пам'яті і продуктивності CPU.

Все, реалізовані в таких системах протоколи TCP / IP таким чином мають набагато меншу максимальну кількість паралельних користувачів (2-5 паралельних http з'єднань).

Реалізуючи TCP / IP, tuxgraphics використовував інший підхід. Кількість даних, яке ми хочемо показати дуже маленьке. Можливо, ви захочете відображати показання приєднаних датчиків або перемикати що ні будь. Для всього цього вам буде потрібно всього лише кілька байт даних. Ми обмежили розмір web сторінки декільком сотнями байт. З цим обмеженням, нам не буде потрібно обмежувати кількість паралельних з'єднань.

AVR мікроконтролер має дивовижний процесор. Більшість операцій виконується за один такт. З TCP / IP, реалізованим tuxgraphics, на цьому контролері ми реально можемо отримати верх продуктивності, що виходить за межі цього web сервера. У ньому немає жорстко запрограмованого обмеження числа користувачів і він може обслужити сотні web сторінок в секунду. Деякі web сервери, реалізовані на невеликих персональних комп'ютерах не зможуть дати такої продуктивності.

Завантаження і посилання

Як зробити web сервер на мікроконтролері Atmega88?
Як багато повинні посилати ми?
Як багато пакетів даних має бути надіслане для такої сторінки?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью