Сообщения

Сообщения за октябрь, 2025

CryptoBot ESP32 Micropython

Изображение
CryptoBot   Данные берутся с биржи QUTRADE . В будущем будут добавленны и другие биржи. Для нормальной работы надо прописать свой SSID и пароль (Настройки Wi-Fi). WIFI_SSID = "My_network" WIFI_PASS = "112233344"  Частота обновления раз в 5 секунд настраивается параметром CHECK_INTERVAL .  Для начала торгов надо получить api_key и secret_key после регистрации на бирже  QUTRADE . Принцип работы бота , при изменении цены на 1% бот выставляет ордер на покупку и ордер на прдажу +-1%.  main.py      import urequests as requests import ujson as json import time from led_driver import print_like_console , print_multiline_console import uhashlib as hashlib import ure import ubinascii WIFI_SSID = "My_network" WIFI_PASS = "112233344" import network wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect( WIFI_SSID , WIFI_PASS ) while not wlan.isconnected(): pass print("Wi-Fi OK", wlan.ifconfig()) print_like_console('W...

ESP8266 Device Info и Benchmark

Изображение
ESP8266   Для установки Python  и прошивки для ESP8266 нужен такой вот переходник как на фото , так же надо сделать перемычку что бы переводить его в режим программирования. Лучше припаять переключатель.   Установка Micropython на  ESP8266: 1)pip install esptool 2)esptool.py --port /dev/ttyUSB0 erase_flash 3)esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 ESP8266_GENERIC-20231005-v1.21.0.bin  (Для третьего пункта надо скачать прошивку и запустить консоль из папки с прошивкой , предварительно проверив что название прошивки совпадает с названием в коде)  Тест ESP8266.      === Device Info === CPU Frequency: 80 MHz Free memory: 31200 bytes Allocated memory: 6816 bytes Filesystem size: 0 KB free of 0 KB total MAC address: 68:c6:3a:ab:48:49 Wi-Fi not connected =================== === CPU Benchmark === Iterations: 100000 Elapsed time: 5605 ms Approx. iterations/sec: 17841.2       Тест ESP32...

HC-SR04 ESP32 Micropython

Изображение
HC-SR04.   ESP32 > HC-SR04  GND  > GND  VN  > VCC   D4 > Trig   D5 > Echo Простой пример. main.py      from machine import Pin, time_pulse_us import time # Настройка пинов TRIG = Pin(4, Pin.OUT) ECHO = Pin(5, Pin.IN) def distance_cm(): # Генерация импульса на Trig TRIG.value(0) time.sleep_us(2) TRIG.value(1) time.sleep_us(10) TRIG.value(0) # Чтение длительности импульса на Echo duration = time_pulse_us(ECHO, 1, 30000) # 1 = высокий уровень, 30ms таймаут if duration < 0: return -1 # нет ответа # Перевод в сантиметры (скорость звука ~343 м/с) distance = (duration / 2) / 29.1 return distance # Основной цикл while True: dist = distance_cm() if dist != -1: print("Расстояние: {:.2f} см".format(dist)) else: print("Ошибка измерения") time.sleep(0.1)

VEML7700 ESP32 Micropython

Изображение
VEML7700 - высокоточный I²C-сенсор окружающего света от Vishay с динамическим диапазоном до ~120 000 люкс.   ESP32 > VEML7700  GND  > GND  3V3  > VIN   D16 > SDA   D17 > SCL Простой пример. main.py      from machine import Pin, I2C import time import veml7700 # создаём I2C с альтернативными пинами (21 и 22 заняты) i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=100000) # создаём объект сенсора sensor = veml7700.VEML7700(address=0x10, i2c=i2c, it=100, gain=1/8) # проверка связи print("I2C устройства:", i2c.scan()) # основной цикл while True: lux = sensor.read_lux() print("Освещённость:", lux, "лк") time.sleep(1) Обязательно установить драйвер. veml7700.py # Copyright (c) 2019 Joseph Hopfmüller # This module is a fork of Christophe Rousseaus module. # see: https://github.com/palouf34/veml7700.git # # Original coypright notices are reproduced below. # Changes: # - fixed critical error in...

WEBBOX ESP32 Micropython

Изображение
WEBBOX В комплекте : ESP32-WROOM-32 SSD1306 Аккумулятор с холдером. Контроллер заряда аккумулятора.  ESP32 > SSD1306  GND  > GND  VN  > VCC   D22 > SCK   D21 > SDA Данные берутся с биржи QUTRADE . В будущем будут добавленны и другие биржи. Для нормальной работы надо прописать свой SSID и пароль (Настройки Wi-Fi). WIFI_SSID = "My_network" WIFI_PASS = "112233344"  Частота обновления раз в 10 секунд.  main.py      import network import urequests import time from led_driver import print_like_console , print_multiline_console # === Настройки Wi-Fi === WIFI_SSID = "" WIFI_PASS = "" # === Подключение к Wi-Fi === wifi = network.WLAN(network.STA_IF) wifi.active(True) if not wifi.isconnected(): print("Подключаюсь к Wi-Fi...") print_like_console('Wi-Fi connection', x=0, y=0, delay=0.05) wifi.connect(WIFI_SSID, WIFI_PASS) # Ждём подключения for i in range(20): if wifi.isconnected(): ...

Реле ESP32 Micropython

Изображение
Реле   ESP32 >  Реле  GND  > GND  3V3  > VCC   D22 > IN Простой пример включения и отключения. main.py      from machine import Pin from time import sleep # Создаём объект для пина, к которому подключено реле relay = Pin(22, Pin.OUT) # GPIO23 while True: print("Реле ВКЛ") relay.value(1) # включить реле (или 0, если инверсное) sleep(2) print("Реле ВЫКЛ") relay.value(0) # выключить реле sleep(2)

RA-02 Upgrade

Изображение
RA-02 Upgrade Это продолжение постов про Лору.  Тк Лору советуют запитывать от отдельного источника питания 3.3В с китая была заказанна плата которая понижает напряжение с 5В до 3.3В. 5В берем с платы ESP.  Для базовой станции была заказанна настольная антенна , а для переносных устройств мини антенны.  Так же я заказал усилитьель сигнала , но именно этот работает только в одну сторону , так что он нам не подходит и придется заказывать другой.  В целом все эти обновления позволили увеличить дальность связи и стабильность сигнала на 20-30%

SG90 ESP32 Micropython

Изображение
Сервопривод SG90 .   ESP32 >  SG90  GND  >  Коричневый  VN  >  Красный   D15 >  Оранжевый Простой пример изменение угла по 10 градусов. main.py      from machine import Pin, PWM from time import sleep # Пин для управления серво servo = PWM(Pin(15), freq=50) # 50 Гц = стандартная частота для SG90 def set_angle(angle): # Преобразуем угол (0–180) в duty для ESP32 (0–1023) # Период 20 мс → импульс 0.5–2.5 мс min_duty = 26 # примерно 0.5 мс max_duty = 128 # примерно 2.5 мс duty = int(min_duty + (max_duty - min_duty) * angle / 180) servo.duty(duty) # Тест while True: for ang in range(0, 181, 10): set_angle(ang) sleep(0.3) for ang in range(180, -1, -10): set_angle(ang) sleep(0.3) 0/90/180 градусов.  main.py      from machine import Pin, PWM from time import sleep servo = PWM(Pin(15)) servo.freq(50) def set_angle(a...

MAX98357A ESP32 Micropython

Изображение
MAX98357A — это цифровой усилитель класса D с входом I²S , который принимает аудиопоток напрямую от ESP32 и воспроизводит его через динамик.   ESP32 > MAX98357A  GND  > GND  VN  > VIN   D25 > LRC   D26 > BCLK   D22 > DIN Простой аудиотест. main.py      from machine import I2S, Pin import math, array, time # --- Настройка I2S --- i2s = I2S( 0, sck=Pin(26), ws=Pin(25), sd=Pin(22), mode=I2S.TX, bits=16, format=I2S.MONO, rate=22050, ibuf=10000 ) # --- Функция для генерации и воспроизведения тона --- def play_tone(freq=440, duration=0.2, volume=0.4): sample_rate = 22050 block_size = 1024 total_samples = int(sample_rate * duration) samples_written = 0 while samples_written < total_samples: buf = array.array("h", [0] * block_size) for i in range(block_size): t = (samples_written + i) / sample_rate buf[i] = int...

N-MOS ESP32 Micopython

Изображение
N-MOS   ESP32 > N-MOS  GND  > GND   D4 > TRIG/PWM Включаем и выключаем нагрузку. main.py      from machine import Pin import time TRIG = Pin(4, Pin.OUT) # возьми удобный GPIO # Включаем TRIG.value(1) time.sleep(2) # Выключаем TRIG.value(0) time.sleep(2) Включаем нагрузку на половинной мощности на 4 секунды. Постепенно набираем скорость от 0 до максимума.  main.py      from machine import Pin, PWM import time p = PWM(Pin(4), freq=1000) # Попробуем сначала duty (0..1023). Если нет — используем duty_u16. try: p.duty(512) # ~50% (если поддерживается) except AttributeError: p.duty_u16(32768) # ~50% для 16-bit time.sleep(4) # плавное изменение for i in range(0, 1024, 16): try: p.duty(i) print(i) except AttributeError: p.duty_u16(int(i * 64)) # 1023->65535 scale time.sleep(1) p.deinit()

Telegram BOT ESP32 micropython

Изображение
Telegram BOT ESP32 micropython   Основное приемущество ESP32 над той же Ардуино и другими микроконтроллерами является наличие у ESP32 Bluetooth и  Wi-Fi. В коде надо указать  ssid и  pass для подключения к интернету. Для работы с ботом нужно получить  bot_token  и id пользователя или чата куда будут отправляться сообщения. Для примера подключим датчик температуры отсюда .    Что бы не сильно спамить раз в 5 минут берутся данные с датчика и отправляются в чат.      main.py      import network import time import onewire import ds18x20 import urequests from machine import Pin , UART # Set the pin number for the LED led_pin = 2 # Built-in LED on most ESP32 boards # Initialize the LED pin as an output led = Pin(led_pin, Pin.OUT) def send_command(command): uart.write(command + '\r\n') time.sleep(0.1) # Настройки Wi-Fi SSID = 'ssid' PASSWORD = 'pass' # Токен вашего Telegram бота и ID чата TELEGRAM_BOT_TOKEN ...

WS2812B ESP32 micropython

Изображение
WS2812B   ESP32 > WS2812B 3V3 > V+  GND  > V-   D5 > IN Матрица загорается красным , зеленым и синим. main.py      import machine import neopixel import time # Number of LEDs in your chain: NUM_LEDS = 64 # The pin you connect the data line to: DATA_PIN = 5 # change to your pin # Create the NeoPixel object np = neopixel.NeoPixel(machine.Pin(DATA_PIN, machine.Pin.OUT), NUM_LEDS) def clear(): for i in range(NUM_LEDS): np[i] = (0, 0, 0) np.write() def set_color_all(r, g, b): for i in range(NUM_LEDS): np[i] = (r, g, b) np.write() def rainbow_cycle(delay_ms=20): # A simple rainbow effect for j in range(256): for i in range(NUM_LEDS): # wheel gives a color based on position idx = (i * 256 // NUM_LEDS + j) & 255 np[i] = wheel(idx) np.write() time.sleep_ms(delay_ms) def wheel(pos): """Generate colors across a 0-255 rainbow wheel.""" if...

Пассивный буззер (PWM) ESP32 micropython

Изображение
Пассивный буззер (PWM)   ESP32 > PWM 3V3 > VCC   GND  > GND   D5 > I/O Мелодия Star Wars. main.py      from machine import Pin, PWM import time buzzer = PWM(Pin(5)) def tone(freq, duration): if freq == 0: buzzer.duty(0) time.sleep(duration) else: buzzer.freq(freq) buzzer.duty(50) time.sleep(duration) buzzer.duty(0) time.sleep(0.02) # Ноты (частоты в Гц) A4 = 440 A4S = 466 B4 = 494 C5 = 523 C5S = 554 D5 = 587 D5S = 622 E5 = 659 F5 = 698 F5S = 740 G5 = 784 G5S = 831 A5 = 880 # 🎵 Мелодия Star Wars (упрощённая) melody = [ (A4, 0.5), (A4, 0.5), (F5, 0.35), (C5, 0.15), (A4, 0.5), (F5, 0.35), (C5, 0.15), (A4, 1.0), (E5, 0.5), (E5, 0.5), (E5, 0.5), (F5, 0.35), (C5, 0.15), (A4, 0.5), (F5, 0.35), (C5, 0.15), (A4, 1.0), (A5, 0.5), (A4, 0.35), (A4, 0.15), (A5, 0.5), (G5S, 0.25), (G5, 0.25), (F5S, 0.25), (F5, 0.25), (F5S, 0.5), (0, 0.25), (A...