Задумал я как-то написать свою прошивку для esp8266. Nodemcu это конечно круто, но мы в состоянии на С писать.
Собрал компилятор для этого модулька, взял библиотеку для ds18b20, которая когда-то была написана для AVR…
Для адаптации нужно правильно написать макросы для ногодрыга.
В sdk esp8266 для дергания ногой предназначены довольно замороченые функции. Давайте попробуем с ними разобраться.
Для того чтобы работать с GPIO нужно подключить заголовок.
#include "gpio.h"
Для работы с ногами есть одна функци. Она настраивает ногу как вход/выход, и заодно еще устанавливает её значение.
void gpio_output_set(uint32 set_mask, uint32 clear_mask, uint32 enable_mask,uint32 disable_mask)
set_mask — маска установки 1 (пардон за трудности перевода). Если пишем туда 1 бит, то устанавливается высокий уровень, если 0 — ничего не меняется.
clear_mask — маска установки 0. Если пишем туда 1 бит, от устанавливается низкий уровень, если 0 — ничего не меняется.
enable_mask — если ставим 1, то ножка настраивается на выход.
disable_mask — установкой 1 бита настраиваем на вход.
Посмотрим на примере GPIO2.
Чтобы настроить ножку на вход:
gpio_output_set(0, 0, 0, BIT2)
Чтобы настроить на выход и установить низкий уровень:
gpio_output_set(0, BIT2, BIT2, 0)
Чтобы настроить на выход и установить высокий уровень:
gpio_output_set(BIT2, 0, BIT2, 0)
Можно настраивать сразу несколько ног.
Что будет если настроить одну ногу на вход и выход или установить её в 1 и 0 одному Богу известно.
Дабы ничего не перепутать китай предусмотрел макросы GPIO_OUTPUT_SET(gpio_no, bit_value) и GPIO_DIS_OUTPUT(gpio_no). Тут комментарии не нужны.
Чтобы получить состояние входа предусмотрен макрос GPIO_INPUT_GET(gpio_no).
Можно поморгать диодиком.
После определения макросов датчик ожил.
Если интересно, код на GitHub.
Вообще не плохо было бы рассказать про написание прошивок с использованием чистоно sdk, без мусора в виде ардуины или вообще lua, js, python. А то материалов, да еще на руссок по этой теме очень мало. Максимум — помигать диодом, без упоминания работы с переферией.
Нужны