Безпосереднє програмування esp8266 wifi, just for fun

Безпосереднє програмування esp8266 wifi, just for fun

ESP8266 є відповіддю на питання «я хочу чогось з Wi-Fi». Однак, є ряд інженерів і любителів, які не чули про це чіпі або чули, але насправді не розуміють, що це таке.

ESP8266 чіп - це процесор з вбудованим ОЗУ, ROM, і Wi-Fi, зовнішня обв'язка складається з декількох дешевих радіодеталей. Виходить дешевше $ 4! Або $ 5, якщо ви хочете мати чіп на несучої платі, яка включає всі потрібні компоненти. Споживана потужність 200 мА, дальність зв'язку близько 300м без додаткового обладнання, а з антеною і все 4 км.

Знай своє залізо

Процесор за замовчуванням працює на частоті 80 МГц, яка може доходити до 160МГц, чіп має близько 80 Кб ОЗУ DRAM, і

35Кб високошвидкісний IRAM.

За замовчуванням, коли ви купуєте ці плати, багато хто з них приходять з «AT» прошивкою, яка дозволяє легко використовувати ESP8266 у вигляді простого бездротового модему, контрольованого через послідовний порт. І найчастіше це все, а для більш складних речей чомусь використовується зовнішній процесор, хоча 8266 теж може чимало.

Є кілька режимів в яких ESP8266 чіп може завантажитися в залежності від конфігурації GPIO пинов. Ми обговоримо запуск Flash і заливку по UART. Крім цього, є можливість дистанційного завантаження firmware, але про це іншим разом.

Для двох режимів роботи ESP8266, про які ми поговоримо, процесор очікує низький рівень GPIO15, і високий GPIO2. GPIO0 використовується для вибору режиму. Під час звичайної роботи потрібно використовувати резистор для підтягування GPIO0 вгору. Це змусить бутлоадер всередині ESP8266 вважати дані з мікросхеми EEPROM в IRAM і завантажити вашу програму. Якщо ми встановимо низький рівень GPIO0, то завантажувальний ПЗП (ROM) всередині ESP8266 бере керування на себе і чіп починає спілкуватися з UART. Використовуючи це завантажувальний ПЗП, ми можемо залити нашу програму на флеш-пам'ять.

ESP8266 підтримує різні високі швидкості передачі даних, наприклад, на швидкості 454,800 можна вносити зміни в програму і тестувати дуже швидко. Офіційний інструмент для завантаження прошивки в чіп - XTCOM, але є і сторонні розробки, наприклад, скрипт esptool.py дозволяє автоматизувати заливку програм. Крім того, коли цей скрипт закінчить прошивати чіп, навіть якщо GPIO0 пов'язаний з низьким рівнем, він запустить вашу прошивку на виконання. Це означає, що під час розробки можна тримати GPIO0 притягнутим до землі.

Безпосереднє програмування esp8266 wifi, just for fun

Отже, ваш інструмент розробника складається з:

  1. Перемикача або кнопки GPIO0 на землю, і з pull-up резистором до VCC
  2. GPIO2 і CH_PD з'єднані з VCC
  3. GPIO15 → GND
  4. Перетворювача напруги з 5В USB-TTL UART адаптера до 3.3В для ESP8266

Інструменти для компіляції

Як тільки ви зберете свій набір інструментів, то можете скомпілювати прошивку.

Фірма Espressif поширює свій SDK вільно під ліцензією Espressif GPL. SDK містить приклади і заголовки для ПЗУ, а також бібліотеки Espressif. Важливо відзначити, що є бібліотечне співтовариство, але поки його код нижче рівня Espressif бібліотек. Можливо, це зміниться в майбутньому.

Фірмовий компілятор Espressif просто так не роздає. Однак можна загугли і офіційний компілятор і середовище розробки, засновану на Eclipse.

програмування

Є кілька моментів, які варто взяти до відома при програмуванні ESP8266.

По-перше, є купа функцій, які вже вбудовані в ROM і які ви можете використовувати. Це означає, що вам не потрібно повторно реалізувати, наприклад, MD5 або HMAC, SHA1, SPI, функції UART, функції з плаваючою комою, AES, команди для роботи з пам'яттю, printf, низькорівневі інструменти введення-виведення, і навіть планувальник подій в режимі реального часу, і, що найголовніше, ... 802.11!

Повний список функцій, які знаходяться на чіпі ПЗУ можна знайти в файлі eagle.rom.addr.v6.ld.

Ті функції що в ПЗУ, це ще не все API. Ми можемо побачити ряд додаткових інструментів. ESP8266 може виступати в якості точки доступу або клієнта (або обох разом). За замовчуванням ESP8266 має свій власний унікальні AP IP і SSID. Тобто при включенні його «з коробки» завантажується рідний API, чіп стартує в хост-режимі зі своїм власним DHCP сервером. Ви можете знайти його за допомогою сканування Wi-Fi мереж, в імені точки доступу буде рядок «ESP8266».

За деякими думками, прошивки з AT командами глючний. Як варіант є NodeMcu, - ця прошивка може інтерпретувати команди мови Lua. Причому не тільки в терміналі, як AT команди, а створювати файли у флеш-пам'яті ESP8266 і виконувати їх.

Підключення ESP8266 до точки доступу в 8 рядках коду

Як тільки ваш ESP8266 завантажиться, і вам треба, щоб він підключився до існуючої WIFI мережі, напишіть наступний простий код:

Надіслати дані - espconn_sent. Закрити з'єднання - espconn_disconnect. Всякий раз, коли ви отримуєте дані, вони передаються в recv callback.

Ви, напевно, помітили, що використана директива ICACHE_FLASH_ATTR. Як ми пам'ятаємо, пам'яті IRAM не так багато. Ця директива дозволить зберегти функцію у флеш-пам'яті. Після завантаження з flash інструкції кешуються, але не занадто довго.

Робота з GPIO

Останній ключовий момент цієї статті - GPIO.

Висновки (Піни) мають додаткові внутрішні що підтягують pull-up (GPIO0..15) і стягують pull-down резистори (GPIO16). Джерело. Всі вони можуть бути налаштовані як входи або виходи. Є програмні функції для роботи з GPIO.

Ви повинні будете викликати gpio_init (...), деякі макроси такі, як PIN_PULLDWN_DIS (...), PIN_PULLUP_EN (...) та інші, знайдені в SDK. Ви можете налаштувати входи / виходи з gpio_output_set. Багато з висновків GPIO можуть мати кілька функцій, деякі з цих функцій включені за замовчуванням, так що, наприклад, при завантаженні ви нічого не можете зробити з GPIO12 і GPIO14, поки вони не будуть обрані як GPIO.