Всем здравствуйте! И всех, кому положено, с праздником!
Сегодня выходной и есть повод сделать что-то не большое, чтобы отвлечься и заодно попрактиковаться в чем-то новом. Случилось так, что на днях у меня сломался ссд диск с системой и мой любимый Fusion 360 пропал с радаров. Теперь его можно установить только обходными путями и с этим ещё предстоит помучиться. И я решил установить FreeCAD, который таки дорос до версии 1.0. Для того, чтобы его пощупать я решил сделать что-то не сложное. Например, гусеничную платформу на детальках, которые были под рукой.
Вернее не только это, а ещё 3д принтер, модули esp8266 и куча всевозможных радиодеталей на любой вкус и цвет и макетная плата в сильно потрепанном состоянии.
И ещё аккумулятор литий-ионный на 3,7 вольта. Что бы так не жить!
Открыл я FreeCAD, нарисовал, с трудом, ведомое колесо, чтобы свободно вращалось на теле винта М3 и приступил к разработке корпуса. Пусть, думаю, печатается, пока я паяю электронику.
Как же я тогда ошибался!
Прошла куча времени и корпус кое-как был слеплен. Оброс подробностями в виде системы "амортизаторов" из канцелярской резинки и дополнительных ведомых колёс, посадочные местом для макетки и всего такого. Пришло время сделать мерки.
Вставил кое-как винты в напечатанный кусочек корпуса, натянул резинку.
Вставил мотор, пока что без крепления, и понял, что немного промахнулся! Нужно ещё немного перенести отверстие для лучшего натяжения, но мысль о FreeCAD меня пугала, а остатку корпуса для примерки ещё печататься минут 20. Решил заняться схемой.
Быстро накидал проект в любимом KiCAD(что-то сегодня со средами для разработки никакого разнообразия в названиях).
Схема до невозможности простая. Два полных моста на npn-транзисторах, небольшая защита от выбросов обратной ЭДС, стабилизатор на 3,3В, и, собственно сам модуль esp8266.
Можно начать собирать.
Первое, что я сделал - шаг отверстий на макетной плате - 2,54мм, а на модуле значительно меньше. Ну ничего. Возьмём гребёнку с нужным для макетки шагом и подогнем.
Далее без особых трудностей спаял всё по схеме и проверил отдельно работу мостовых драйверов. Касался выводами резисторов для каналов А и B плюса питания. Все работало хорошо.
Далее нужно как-то проверить электронику и работоспособность системы в целом. Быстро накидал скетч для ардуино:
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "ВАШ_SSID"; // Замените на SSID вашей сети
const char* password = "ВАШ_ПАРОЛЬ"; // Замените на пароль вашей сети
ESP8266WebServer server(80);
// Пины для управления
const int LF = 5;
const int LR = 4;
const int RF = 14;
const int RR = 12;
void setup() {
// Настройка пинов как выходов
pinMode(LF, OUTPUT);
pinMode(LR, OUTPUT);
pinMode(RF, OUTPUT);
pinMode(RR, OUTPUT);
// Инициализация Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Подключение к Wi-Fi...");
}
Serial.println("Подключено к Wi-Fi");
Serial.println(WiFi.localIP());
// Настройка HTTP-сервера
server.on("/control", HTTP_GET, handleControl);
server.begin();
}
void loop() {
server.handleClient();
}
void handleControl() {
String pin = server.arg("pin");
String state = server.arg("state");
if (pin == "LF") digitalWrite(LF, state.toInt());
if (pin == "LR") digitalWrite(LR, state.toInt());
if (pin == "RF") digitalWrite(RF, state.toInt());
if (pin == "RR") digitalWrite(RR, state.toInt());
server.send(200, "text/plain", "OK");
}
Используется модуль esp8266 как есть. И, поэтому, для прошивки потребуется usb-ttl переходник. О том, как залить прошивку недавно на дзене вышла отличная статья. Всегда читаю этого автора. Все довольно основательно.
И тестовое приложение для андроида на языке Python, используя библиотеку kivy.
Почему именно Python? Как-то не хотелось забираться в дебри нашего родного, хоть и с большой натяжной, Kotlin и ставить огромное и требовательное Android studio. Тем более последний раз, когда я его открывал, кажется, был в прошлой жизни.
Любил я тогда всяческую нелепицу. И занесла меня судьба не далеко, буквально через дорогу, от острова Ява. И в мою голову пришла идея поизучать, лёжа под солнышком, тогда ещё просто надстройку над Явой. Несмотря на то, что они назвали функции fun, потому что программирование - это круто! Мне как-то не зашло. Но появилось желание полежать на пляже острова Котлин с учебником по Java... Так, о чем это я?
Я про то, что самым лёгким вариантом для тестирования и создания приложения под андроид мне показался лёгкий vscode, Python и библиотека kivy.
from kivy.app import App// пока что без комментариев
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
import requests
class ControlApp(App): def build(self): self.ip = "ВАШ_IP_ESP8266" # Замените на IP вашего ESP8266 layout = GridLayout(cols=2)
buttons = [ ("LF", "LF"), ("LR", "LR"), ("RF", "RF"), ("RR", "RR") ]
for text, pin in buttons: btn = Button(text=text) btn.bind(on_press=lambda instance, pin=pin: self.send_request(pin, 1)) btn.bind(on_release=lambda instance, pin=pin: self.send_request(pin, 0)) layout.add_widget(btn)
return layout
def send_request(self, pin, state): url = f"http://{self.ip}/control?pin={pin}&state={state}" requests.get(url)
if __name__ == "__main__": ControlApp().run()
Комментарии не писал. Сначала нужно было все проверить. Но...
На часах уже девять вечера, а новые носки не меряны, жена записала в без вести пропавшие и никакого праздника! Ну, что ж... Сматываем удочки, отправляемся в тылы.
Продолжение следует...
Всем спасибо за просмотр! Если есть какие-то замечания к конструкции или предложения, добро пожаловать в комментарии. А я пойду. Но завтра обязательно соберу все в кучу, поправлю корпус, напечатаю и испытаю. Если кому-то действительно интересно объяснение кода - дайте знать.
Ещё раз всех причастных с праздником! До свидания!