Arduino + ESP8266 з нуля на прикладі Wi-Fi термометра, частина перша

Частина 1. Підготовка ESP8266

Навіщо ця стаття? На хабре вже є ряд статей про використання ESP в різних конфігураціях, але чомусь без подробиць про те, як саме все підключається, прошивається і програмується. Типу «я взяв ESP, дві пальчикові батарейки, DHT22, закинув в коробку, потряс годинку і термометр готовий!». В результаті виходить дивно: ті, хто вже працюють з ESP не бачать в зробленому нічого незвичайного, а ті, хто хоче навчитися — не розуміють, з чого почати. Тому, я вирішив написати докладну статтю про те, як підключається і прошивається ESP, як його зв'язати з Arduino і зовнішнім світом і які проблеми мені траплялися на цьому шляху. Посилання на Aliexpress наводжу лише для подання порядку цін та зовнішнього вигляду компонентів.

Отже, у мене було два мікроконтролера, сім різних сенсорів, п'ять джерел живлення, температурний датчик DHT22 і ціле безліч проводів всіх сортів і забарвлень, а так само незліченну кількість опорів, конденсаторів і діодів. Не те, щоб все це було необхідно для термометра, але якщо вже почав займатися мікроелектронікою, то стає важко зупинитися.



Харчування

Для роботи ESP8266 потрібно напруга 3.3 В і струм не нижче 300мА. На жаль, Arduino Uno не в змозі забезпечити такий струм, як не в стані забезпечити його і програматори типу FT232RL — їх межа близько 50мА. А значить доведеться організувати окреме живлення. І краще б, щоб Arduino теж працював від 3.3 В, щоб уникнути проблем типу «я подав пятивольтовый сигнал на висновок RX модуля ESP, чому пахне паленою пластмасою?».

Є три рішення.

1. Купити готовий блок живлення 3.3 Ст.

2. Купити готовий модуль з регулятором напруги, понижуючий 5В до 3.3 Ст. Мабуть, це самий зручний варіант.

3. Зібрати модуль самому з регулятора AMS1117 і одного танталового конденсатора на 22мкФ.

Я вибрав третій пункт, оскільки мені часто потрібно 3.3 В, я жадібний і я люблю вбудовувати регулятори прямо у блоки живлення.

З AMS1117 все просто: якщо покласти його текстом вгору, то напруга на ногах зростає зліва направо: 0(Gnd), 3.3 (Vout), 5В (Vin).
Між нулем і виходом потрібен танталовий конденсатор на 22мкФ (так інструкції, що буде якщо поставити електролітичний — я не перевіряв). У танталового SMD-конденсатора плюс там, де смужка. Трохи жахливої пайки абсолютно не призначених для такого варварства SMD-компонентів і:

image



Обов'язково перевіряйте вихідна напруга. Якщо воно значно менше 3.3 В (наприклад, В 1.17) — дайте регулятору охолонути після пайки і перевірити контакти. Якщо поставите конденсатор більше, ніж на 22мкФ, то мультиметр може показати більш високу напругу.

Чому саме AMS1117? Він широко використовується. Його ви можете знайти майже скрізь, навіть у Arduino Uno, як правило, стоїть AMS1117-5.0.
Якщо ви знаєте щось схожих габаритів і ціни, ще більш просте у використанні — напишіть, будь ласка.

Важливий момент. Не знаю вже чому, але AMS1117 вкрай капризно відноситься до якості з'єднань. Контакти повинні бути надійні. Краще — пропаяні. Інакше він на тестах видає 3.3 В, але під навантаженням не видає нічого.

Підключення ESP8266

Я вибрав модель 07, оскільки у неї відмінний металевий щит, який працює як захист від наведень, механічних впливів і радіатор. Останнє забезпечує різницю між згорілим модулем і просто нагревшимся. Крім того, є гніздо під зовнішню антену.

Щоб чіп запустився потрібно з'єднати VCC і CH_P через резистор 10кОм. Якщо такого немає, то згодиться будь-який з діапазону 1-20кОм. Крім того, конкретно модель 07 ще вимагає, щоб GPIO15 (найбільш близький до GND) був «на землі» (на зображенні не видно, тому що з'єднання з іншої сторони).



Тепер беремо програматор, перемикаємо його на 3.3 В і підключаємо RX до TX, TX до RX і GND до «землі» (у мене без цього передача нестабільна). Якщо ви не можете переключити програматор на 3.3 В, найпростіший резисторний дільник напруги: з'єднайте ESP RX з TX програматора через опір в 1кОм, а ESP RX із «землею» через 2кОм. Існує маса більш складних і більш надійних способів зв'язати 3.3 В і 5В, але в даному випадку і так зійде.



І єднаємося на швидкості 9600 за потрібною COM-порту (можна подивитися в диспетчері пристроїв).


Я використовую SecureCRT, Putty теж підійде, а цінителі Лінукса і так знають, що робити і де дивитися.


(AT+RST перезавантажує чіп)

Якщо нічого не відбувається — мигніть харчуванням, якщо все одно нічого не відбувається — перевірити відповідність TX/RX, спробуйте переставити їх місцями або припаяти до чіпу.

Іноді чіп в ході знущань експериментів зависає і тоді його треба знеструмити, в тому числі відключивши і програматор (наприклад, витягнувши його з USB), оскільки чіпу вистачає навіть вступників крихт живлення, щоб наполегливо тупити і не працювати.

Іноді фокуси з програматором вішають USB-порт. Ліки очевидно — витягнути і вставити в інший.

Іноді при цьому змінюється номер COM-порту. Під Linux це можна вирішити за допомогою udev.

Якщо замість тексту приходить сміття, то перевірте налаштування швидкості. Деякі старі чіпи працюють на 115200.

На старті чіп нагрівається, але якщо він реально гарячий і продовжує грітися — відключайте і перевірте всі з'єднання. Щоб на корпус не потрапляло +3.3 В, щоб 5В до нього взагалі нікуди не приходили, щоб «земля» програматора була з'єднана з «землею» чіпа. Моделі з металевим щитом дуже важко спалити (але немає нічого неможливого, а на моделі без щитів скаржаться, мовляв навіть невелика помилка може стати останньою в житті чіпа. Але це я не перевіряв.

Прошивка

Мій вибір — NodeMCU. У неї проблеми з пам'яттю і підтримкою заліза, але це багаторазово окупається простотою коду і легкістю налагодження.

Так само потрібно NodeMCU flasher і LuaLoader (останнє — опціонально, є й інші клієнти для роботи з цією прошивкою).


Вимикаємо чіп. Під'єднуємо GPIO0 до землі і вмикаємо чіп:



Якщо нічого не відбувається і поля AP MAC/STA MAC порожні — перевірте ще раз, щоб GPIO0 був на «землі».
Якщо прошивка почалася, але зависла — подивіться в закладці Log, у мене чомусь конкретно цей чіп відмовився прошивати на FT232RL, але зате без проблем прошив на PL2303HX на швидкості 576000.


Зверніть увагу: STA MAC змінився. Підозрюю, що flasher його неправильно показував, але потрібна перевірка.

Для економії сил і нервів можна взяти готовий або напівготовий варіант.

Є одноразові адаптери з зручною розводкою.
готові до прошивці.
Є варіанти з простенькі кит-комплекти і поскладніше — ESP8266-EVB
Є з готовим USB-адаптером — NodeMCU Development Board. Під неї навіть якісь шилды роблять.

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

/>
/>


<input type=«checkbox» id=«vv67509»
class=«checkbox js-field-data»
name=«variant[]»
value=«67509» />
Більше тексту і картинок
<input type=«checkbox» id=«vv67511»
class=«checkbox js-field-data»
name=«variant[]»
value=«67511» />
Відео процесу
<input type=«checkbox» id=«vv67513»
class=«checkbox js-field-data»
name=«variant[]»
value=«67513» />
посилання
<input type=«checkbox» id=«vv67515»
class=«checkbox js-field-data»
name=«variant[]»
value=«67515» />
Лаконічніше б

Проголосувало 11 осіб. Утрималося-10 чоловік.


Потрібні посилання на компоненти в магазинах?

/>
/>

<input type=«radio» id=«vv67517»
class=«radio js-field-data»
name=«variant[]»
value=«67517» />
Так, це наочно
<input type=«radio» id=«vv67519»
class=«radio js-field-data»
name=«variant[]»
value=«67519» />
Варто замінити їх посиланнями на скріншоти
<input type=«radio» id=«vv67521»
class=«radio js-field-data»
name=«variant[]»
value=«67521» />
Не потрібні, але не заважають
<input type=«radio» id=«vv67523»
class=«radio js-field-data»
name=«variant[]»
value=«67523» />
Не потрібні

Проголосував 21 людина. Утрималося 5 чоловік.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.