Используем CSS код, для написания красивой кнопки в среде программирования Visual Studio Code.

В данном уроке мы сделаем не большой дизайн нашим кнопкам, а так же напишем не большой скрипт для передачи данных о состоянии кнопки. В дальнейшем мы применим данный код для микроконтроллера ESP8266.

Программный код:

<html>
 <head>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <style>
   body {
     max-width: 800px;
     margin:0px auto;
    }
   .switch {
     position:relative;
     display:inline-block;
     width:120px;
     height:68px
   }
   .switch input {display:none}
   .slider {
     position:absolute;
     top:0px;
     left:0px;
     right:0px;
     bottom:0px;
     background-color:rgb(190, 8, 8);
     border-radius:34px
   }
   .slider:before {
     position:absolute;
     content:"";
     height:52px;
     width:52px;
     left:8px;
     bottom:8px;
     background-color:rgb(19, 17, 17);
     transition:.4s;
     border-radius:68px
   }
   input:checked+.slider{ background-color:#37e714 }
   input:checked+.slider:before {
     transform:translateX(52px)
   }
 </style>
 <script>
   function toggleCheckbox(element) {
     var xhr = new XMLHttpRequest();
     if (element.checked) { xhr.open("GET", "/?led=on", true); }
     else { xhr.open("GET", "/?led=off", true); }
     xhr.send();
   }
 </script>
</head>
<body>
 <h1>ESP Web Server</h1>
 <label class="switch">
   <input type="checkbox" onchange="toggleCheckbox(this)"> <!-- %s> -->
   <span class="slider"></span>
 </label>
</body>
</html>

Разберем наш программный код:
Тэгом <&style> <&/style>

мы создаем стиль элемента с помощью правил CSS.

max-width — Ширина элемента

margin  —  определяет внешний отступ на всех четырёх сторонах элемента. Если использую два параметра, как у нас, выравнивание идет по вертикали и горизонтали.

position — позиционирование элемента в документе,  relative элемент позиционируется в соответствии с размером макета страницы, смещение не влияет на положение любых других элементов.

display — определяет тип отображения элемента,  inline-block означает элемент, который продолжает находиться в блоке. None — элемент не видимый.

Строкой .switch input {display:none},  мы делаем не видемым элемент на экране, хотя его свойства будем использовать.

.slider — элемент слайдер.

position — тип позиционирования, absolute — 
указывает, что элемент абсолютно позиционирован, положение элемента задается свойствами lefttopright и bottom.
 
slider:before — создаем еще один слайдер внутри слайдера.
transition — скорость изменения слайдера.
input:checked+.slider — состояние чек  и слайдера «до нажатия»(галочка снята).
input:checked+.slider:before — состояние чека и слайдера после «нажатия»( галочка поставлена).
transform — перемещение внутреннего слайдера.
 
Далее мы используем скрипт, для обработки нажатия чека, внутри функции мы используем метод XMLHttpRequest – который даёт возможность делать HTTP-запросы к серверу без перезагрузки страницы.
Сам запрос выглядит следующим образом:

 XMLHttpRequest.open() инициализирует новый запрос или повторно инициализирует уже созданный:

&XMLHttpRequest.open(method, url[, async[, user[, password]]])

где:

method —для HTTP-запроса используются такие методы как «GET», «POST», «PUT», «DELETE», и т. д. Игнорируется для URL, отличных от HTTP(S)-запросов.

url — представляет URL для отправки запроса.

async Необязательный логический параметр со значением по умолчанию true, указывающим, выполнять ли операцию асинхронно или нет. Если это значение равно false, метод send() не возвращается, пока не будет получен ответ. Если true, уведомление о получении ответа осуществляется с помощью обработчика события. 

password-  пароль, использующийся для аутентификации; по умолчанию имеет значение null.

xhr.send([body]) —  метод устанавливает соединение и отсылает запрос к серверу. Необязательный параметр body содержит тело запроса.

В функции мы проверяем есть чек или нету, если есть отправляем с помощью команды GET данные на сервер в виде строчки «/?led=on» , если чек нету — отправляем

/?led=off.
Тэг label устанавливает связывает элементы управления, которые находятся внутри него, в нашем случаи это элемент чек и слайдер.
Тэг span -не изменяя общий стиль документа, он меняет только ту часть документа который находиться внутри данного тэга.

При изменении чек бокса(нажали на него), у нас вызывается функция

toggleCheckbox, которая смотрит на изменения.
Запустив данный код, Вы увидите следующее: 
***картинка**
Теперь перенесем весь программный код в наш микроконтроллер, вначале используя язык программирования С, а после microPython.
Программный код на С:

Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое.

Разберем, что же мы с Вами написали:

*******

Теперь перенесем HTML страничку в наш микроконтроллер ESP8266 используя microPython:

Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое.