18px
📋 Скопировано!

🔧 АРДУИНО ПРОЕКТЫ И ПАЯЛЬНИКИ 🔧

Метеостанция, RGB светодиод и другие проекты

2026
🌊 Волна
Будь на своей волне. Общайся. Создавай.
Новая соцсеть для творчества и общения. Регистрируйся, находи друзей, делись идеями.
👋 ВСЕМ ПРИВЕТ!

🔥 Как и обещал, расскажу про проект метеостанция. Взял ESP8266, потом DHT22. Решил сначала сделать сайт - сделал, мне не понравилось. Потом создал бота в Telegram, делал его 2 дня.

🤖 Бот показывает температуру и влажность. Сделал его приватным. Прошил ESP, подключил к повербанку, взял коробку, вырезал отверстия, просунул датчик - и понеслась!

✨ СТАЛ ДОБАВЛЯТЬ В БОТА ПРИКОЛЫ ✨

📱 Создавал его через @BotFather, написал код в Arduino IDE. Код будет ниже. Настолько понравился проект, что решил заказать печать у @Bolodechka. Пока что думаю...

АРДУИНО ПРОЕКТЫ И ПАЯЛЬНИКИ, 25.02.2026 21:34

🔌 СХЕМА ПОДКЛЮЧЕНИЯ DHT22

🔴VCC → 3.3V
GND → GND
🔵DATA → D2 (GPIO4)
Резистор 10кОм

⚡ КОМПОНЕНТЫ МЕТЕОСТАНЦИИ ⚡

🔹

ESP8266 D1 Mini V2

NodeMcu Lua ESP-12 (CH340) Type-C

🌡️

Датчик DHT22

Температура и влажность

Резисторы 10кОм

Для подтяжки данных

🔋

Повербанк

Для автономного питания

📟 ПОЛНЫЙ КОД МЕТЕОСТАНЦИИ

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <DHT.h>

// ========== ТВОИ ДАННЫЕ ==========
const char* ssid = "ваш WiFI";
const char* password = "пароль от него";
#define BOT_TOKEN "8530454620:AAE-HtR87zyZ91dSYn9auueMH3eeoGard4o"

// ID разрешенных пользователей
const String allowedUsers[] = {
  "1234567890",//ID
  "123456789",
  "1234567890"
};
const int totalUsers = 3;
// =================================

#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);

float temperature = 0;
float humidity = 0;
unsigned long lastTime = 0;

bool isAllowed(String chat_id) {
  for(int i = 0; i < totalUsers; i++) {
    if(allowedUsers[i] == chat_id) return true;
  }
  return false;
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  client.setInsecure();
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  
  bot.sendMessage("404415869", "꧁༺ *БОТ ЗАПУЩЕН* ༻꧂", "Markdown");
  bot.sendMessage("332677564", "꧁༺ *БОТ ЗАПУЩЕН* ༻꧂", "Markdown");
  bot.sendMessage("8473046860", "꧁༺ *БОТ ЗАПУЩЕН* ༻꧂", "Markdown");
}

void loop() {
  if(millis() - lastTime > 5000) {
    float t = dht.readTemperature();
    float h = dht.readHumidity();
    if(!isnan(t) && !isnan(h)) {
      temperature = t;
      humidity = h;
    }
    
    int msgCount = bot.getUpdates(bot.last_message_received + 1);
    
    for(int i = 0; i < msgCount; i++) {
      String chat = bot.messages[i].chat_id;
      String text = bot.messages[i].text;
      String name = bot.messages[i].from_name;
      
      if(!isAllowed(chat)) {
        bot.sendMessage(chat, "⛔️ *НЕТ ДОСТУПА*", "Markdown");
        continue;
      }
      
      if(text == "/start" || text == "/menu") {
        String msg = "";
        String upperName = String(name);
        upperName.toUpperCase();
        
        msg += "꧁༺ *ДОБРО ПОЖАЛОВАТЬ* ༻꧂\n\n";
        msg += "*ПРИВЕТ, " + upperName + "*\n";
        msg += "╔══════════════════╗\n";
        msg += "║  *🌡 /TEMP*       ║\n";
        msg += "║  *💧 /HUM*        ║\n";
        msg += "║  *📊 /ALL*        ║\n";
        msg += "║  *📋 /STYLE*      ║\n";
        msg += "║  *📡 /STATUS*     ║\n";
        msg += "║  *❓ /HELP*       ║\n";
        msg += "╚══════════════════╝";
        bot.sendMessage(chat, msg, "Markdown");
      }
      
      else if(text == "/temp" || text == "/TEMP") {
        String msg = "";
        msg += "꧁༺ *ТЕМПЕРАТУРА* ༻꧂\n\n";
        msg += "┏━━━━━━━━━━━━┓\n";
        msg += "┃  *🌡  " + String(temperature, 1) + "°C*\n";
        msg += "┃            ┃\n";
        msg += "┗━━━━━━━━━━━━┛";
        bot.sendMessage(chat, msg, "Markdown");
      }
      
      else if(text == "/hum" || text == "/HUM") {
        String msg = "";
        msg += "꧁༺ *ВЛАЖНОСТЬ* ༻꧂\n\n";
        msg += "┏━━━━━━━━━━━━┓\n";
        msg += "┃  *💧  " + String(humidity, 1) + "%*\n";
        msg += "┃            ┃\n";
        msg += "┗━━━━━━━━━━━━┛";
        bot.sendMessage(chat, msg, "Markdown");
      }
      
      else if(text == "/all" || text == "/ALL") {
        String msg = "";
        msg += "꧁༺ *ВСЕ ДАННЫЕ* ༻꧂\n\n";
        msg += "╔══════════════════╗\n";
        msg += "║  *🌡 ТЕМПЕРАТУРА*\n";
        msg += "║  *" + String(temperature, 1) + "°C*\n";
        msg += "╠══════════════════╣\n";
        msg += "║  *💧 ВЛАЖНОСТЬ*\n";
        msg += "║  *" + String(humidity, 1) + "%*\n";
        msg += "╚══════════════════╝\n\n";
        
        msg += "┌──────────────┐\n";
        msg += "│ ";
        if(temperature < 0) msg += "*❄️ МОРОЗ*";
        else if(temperature < 10) msg += "*🌨 ХОЛОДНО*";
        else if(temperature < 20) msg += "*🌥 СВЕЖО*";
        else if(temperature < 30) msg += "*☀️ ТЕПЛО*";
        else msg += "*🔥 ЖАРА*";
        msg += "\n";
        msg += "└──────────────┘";
        
        bot.sendMessage(chat, msg, "Markdown");
      }

      else if(text == "/style" || text == "/STYLE") {
        String msg = "";
        msg += "꧁༺ *НАШ СТИЛЬ* ༻꧂\n\n";
        msg += "┏━━━━━━━━━━━━━━━━┓\n";
        msg += "┃ *꧁༺ ТЕКСТ ༻꧂*    ┃\n";
        msg += "┃ *꧁༒ ПРИМЕР ༒꧂*   ┃\n";
        msg += "┃ *꧁☂️︎シ︎✰*          ┃\n";
        msg += "┃ *ঔৣ☬✞*           ┃\n";
        msg += "┗━━━━━━━━━━━━━━━━┛\n\n";
        msg += "*✨ КАК ИСПОЛЬЗОВАТЬ:*\n";
        msg += "*СКОПИРУЙ ꧁༺ И ༻꧂*\n";
        msg += "*И ВСТАВЬ СВОЙ ТЕКСТ*";
        bot.sendMessage(chat, msg, "Markdown");
      }
      
      else if(text == "/status" || text == "/STATUS") {
        String msg = "";
        msg += "꧁༺ *СТАТУС* ༻꧂\n\n";
        msg += "┏━━━━━━━━━━━━━━━━┓\n";
        msg += "┃ *📶 WI-FI: " + String(ssid) + "*\n";
        msg += "┃ *🌐 IP: " + WiFi.localIP().toString() + "*\n";
        msg += "┃ *⏱️ РАБОТА: " + String(millis()/60000) + " МИН*\n";
        msg += "┃ *📡 СИГНАЛ: " + String(WiFi.RSSI()) + " DBM*\n";
        msg += "┗━━━━━━━━━━━━━━━━┛";
        bot.sendMessage(chat, msg, "Markdown");
      }
      
      else if(text == "/help" || text == "/HELP") {
        String msg = "";
        msg += "꧁༺ *ПОМОЩЬ* ༻꧂\n\n";
        msg += "┌────────────────┐\n";
        msg += "│ *🌡 /TEMP*      │\n";
        msg += "│ *💧 /HUM*       │\n";
        msg += "│ *📊 /ALL*       │\n";
        msg += "│ *📋 /STYLE*     │\n";
        msg += "│ *📡 /STATUS*    │\n";
        msg += "│ *📋 /MENU*      │\n";
        msg += "└────────────────┘";
        bot.sendMessage(chat, msg, "Markdown");
      }
      
      else {
        String msg = "";
        msg += "꧁༺ *ОШИБКА* ༻꧂\n\n";
        msg += "┏━━━━━━━━━━━━━━━━┓\n";
        msg += "┃ *❓ НЕИЗВЕСТНАЯ* ┃\n";
        msg += "┃ *   КОМАНДА*    ┃\n";
        msg += "┠────────────────┨\n";
        msg += "┃ *НАПИШИ /MENU*  ┃\n";
        msg += "┗━━━━━━━━━━━━━━━━┛";
        bot.sendMessage(chat, msg, "Markdown");
      }
    }
    
    lastTime = millis();
  }
}
                            
🌈 RGB светодиод + ESP8266 (режим точки доступа)

🔌 СХЕМА ПОДКЛЮЧЕНИЯ RGB МОДУЛЯ KY-016 (HW-479)

GND → GND
🔴R → D1 (GPIO5) + 220 Ом
🟢G → D2 (GPIO4) + 220 Ом
🔵B → D3 (GPIO0) + 220 Ом

⚠️ Резисторы 220 Ом обязательны для каждого канала!

⚡ КОМПОНЕНТЫ ДЛЯ ПРОЕКТА ⚡

🔹

ESP8266 D1 Mini V2

NodeMcu Lua ESP-12 (CH340) Type-C

🌈

RGB модуль KY-016 (HW-479)

Светодиодный модуль для Arduino

📦

Коробка распределительная

65x65x50 мм, IP54, распаячная

Резисторы 220 Ом

3 штуки для каждого канала

🔌

Соединительные провода

Папа-мама, мама-мама

📟 ПОЛНЫЙ СКЕТЧ RGB (КОПИРУЙ В ARDUINO IDE)

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

// Определяем пины
#define D0 16
#define D1 5
#define D2 4
#define D3 0

const char* ap_ssid = "RGB_Lamp";
const char* ap_password = "12345678";

ESP8266WebServer server(80);

const int redPin = D1;
const int greenPin = D2;
const int bluePin = D3;

int mode = 0;
unsigned long lastModeUpdate = 0;
int modeStep = 0;
int modeRed = 1023, modeGreen = 0, modeBlue = 0;
bool timerActive = false;
unsigned long timerEndTime = 0;

void setup() {
  Serial.begin(115200);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  WiFi.softAP(ap_ssid, ap_password);
  
  server.on("/", []() {
    String page = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RGB Lamp (AP Mode)</title>
    <style>
        body{font-family:Arial;text-align:center;background:linear-gradient(135deg,#667eea,#764ba2);padding:20px}
        .container{max-width:500px;margin:0 auto;background:white;padding:20px;border-radius:20px}
        .preview{width:150px;height:150px;border-radius:50%;margin:20px auto;border:3px solid white}
        input[type=range]{width:100%}
        .mode-btn{background:#f0f0f0;border:none;border-radius:10px;padding:10px;margin:5px;cursor:pointer}
        .off-btn{background:#ff4757;color:white;border:none;border-radius:30px;padding:15px;width:100%;cursor:pointer;margin-top:20px}
    </style>
</head>
<body>
    <div class="container">
        <h1>RGB Lamp (AP Mode)</h1>
        <div class="preview" id="preview" style="background:rgb(255,0,0)"></div>
        <div><label>Red <span id="redVal">255</span></label><input type="range" id="red" min="0" max="255" value="255" oninput="updateColor()"></div>
        <div><label>Green <span id="greenVal">0</span></label><input type="range" id="green" min="0" max="255" value="0" oninput="updateColor()"></div>
        <div><label>Blue <span id="blueVal">0</span></label><input type="range" id="blue" min="0" max="255" value="0" oninput="updateColor()"></div>
        <button class="mode-btn" onclick="setMode(0)">Manual</button>
        <button class="mode-btn" onclick="setMode(1)">Rainbow</button>
        <button class="mode-btn" onclick="setMode(2)">Fire</button>
        <button class="mode-btn" onclick="setMode(7)">Sunset</button>
        <button class="off-btn" onclick="setColor(0,0,0)">OFF</button>
    </div>
    <script>
        function updateColor(){
            let r=document.getElementById('red').value;
            let g=document.getElementById('green').value;
            let b=document.getElementById('blue').value;
            document.getElementById('redVal').innerHTML=r;
            document.getElementById('greenVal').innerHTML=g;
            document.getElementById('blueVal').innerHTML=b;
            document.getElementById('preview').style.background='rgb('+r+','+g+','+b+')';
            fetch('/set?r='+(r*4)+'&g='+(g*4)+'&b='+(b*4));
        }
        function setColor(r,g,b){
            document.getElementById('red').value=r;
            document.getElementById('green').value=g;
            document.getElementById('blue').value=b;
            updateColor();
            fetch('/mode?m=0');
        }
        function setMode(m){
            fetch('/mode?m='+m);
        }
    </script>
</body>
</html>
)rawliteral";
    server.send(200, "text/html", page);
  });

  server.on("/set", []() {
    if(server.hasArg("r") && server.hasArg("g") && server.hasArg("b")) {
      analogWrite(redPin, server.arg("r").toInt());
      analogWrite(greenPin, server.arg("g").toInt());
      analogWrite(bluePin, server.arg("b").toInt());
      mode = 0;
    }
    server.send(200, "text/plain", "OK");
  });

  server.on("/mode", []() {
    if(server.hasArg("m")) mode = server.arg("m").toInt();
    server.send(200, "text/plain", "OK");
  });

  server.begin();
  Serial.println("Server started. IP: " + WiFi.softAPIP().toString());
}

void loop() {
  server.handleClient();
}
                            
🔧 Arduino Uno и Nano

🔌 ПРОЕКТ 1: Мигание светодиодом

🔴LED + → Pin 13
LED - → GND
Резистор 220 Ом

📟 КОД Blink

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
                            
🔢 МЕМ SIX SEVEN НА ДИСПЛЕЕ (да, я идиот)

🔌 СХЕМА ПОДКЛЮЧЕНИЯ LCD1602 I2C К ARDUINO UNO

🔴VCC → 5V
GND → GND
🟡SDA → A4
🟢SCL → A5

⚠️ Для работы нужна библиотека LiquidCrystal_I2C

⚡ КОМПОНЕНТЫ ДЛЯ ПРОЕКТА ⚡

🔧

Arduino Uno R3

Оригинальный или совместимый, USB кабель

📟

LCD1602 I2C (синий экран)

16x2 символов, с I2C адаптером

🔌

Провода DuPont

Папа-папа, 4 штуки для подключения

📟 КОД: БОЛЬШИЕ ЦИФРЫ 6 И 7 НА LCD

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Массивы для создания кастомных сегментов больших цифр
byte bar1[8] = {B11111, B11111, B00000, B00000, B00000, B00000, B00000, B00000};
byte bar2[8] = {B11111, B11111, B00000, B00000, B00000, B11111, B11111, B11111};
byte bar3[8] = {B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111};
byte bar4[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111};
byte bar5[8] = {B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111};
byte bar6[8] = {B11111, B11111, B11111, B00000, B00000, B00000, B00000, B00000};
byte bar7[8] = {B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000};
byte bar8[8] = {B11111, B11111, B11111, B11111, B11111, B00000, B00000, B00000};

// Функция отрисовки большой цифры 6
void drawSix(int x) {
  lcd.setCursor(x, 0); lcd.write(4); lcd.write(2); lcd.write(2);
  lcd.setCursor(x, 1); lcd.write(4); lcd.write(3); lcd.write(4);
}

// Функция отрисовки большой цифры 7
void drawSeven(int x) {
  lcd.setCursor(x, 0); lcd.write(1); lcd.write(1); lcd.write(4);
  lcd.setCursor(x, 1); lcd.write(7); lcd.write(7); lcd.write(4);
}

void setup() {
  lcd.init();
  lcd.backlight();

  // Загружаем кастомные символы в память дисплея (максимум 8 штук)
  lcd.createChar(1, bar1);
  lcd.createChar(2, bar2);
  lcd.createChar(3, bar3);
  lcd.createChar(4, bar4);
  lcd.createChar(5, bar5);
  lcd.createChar(6, bar6);
  lcd.createChar(7, bar7);
  lcd.createChar(8, bar8);

  lcd.clear();

  // Рисуем цифру 6, начиная с 5-го столбца
  drawSix(5);
  
  // Рисуем цифру 7, начиная с 9-го столбца (оставляем пропуск между ними)
  drawSeven(9);
}

void loop() {
  // В loop ничего не нужно, так как число статичное
}
                            
📺 ОБЗОРЫ И 🛒 ТОВАРЫ

🔪 Нож WORKPRO

🔥 Удобный ножик с упором на лезвии — мелочь, а как выручает!

🛠️ Инструмент для удаления неровностей

🔧 Универсальный инструмент для резки металла, пластика и сантехники

🔥 Турбозажигалка

⚡ Мощная турбозажигалка с ветрозащитой для термоусадки

🖋️ Паяльник FMCHIP FM03

🔥 Цифровой паяльник 20 Вт, питается от повербанка

🚀 M5 Stick C Plus 2

🔥 ESP32-компьютер с цветным экраном, аккумулятором и гироскопом

⚡ ГДЕ КУПИТЬ КОМПОНЕНТЫ ⚡

🔹

ESP8266 D1 Mini V2

🌡️

Датчик DHT22

🌈

RGB модуль KY-016

📦

Коробка распределительная

📺 ПОСЛЕДНИЕ ВИДЕО С КАНАЛА

Видео скоро появится. Пожалуйста, подождите!

🔔 ПОДПИСАТЬСЯ НА КАНАЛ