GPS-часы Pico + GY-NEO6MV2 - мини-стойка 1U
Pico + GY-NEO6MV2 GPS-часы — лицевая панель мини-стойки 1U
Вдохновленный видео Джеффа Гирлинга о GPS-часах Pico, я решил создать свою собственную версию, адаптированную для системы «1U Mini Rack». Эта лицевая панель позволяет установить GPS-часы непосредственно в настольную стойку.
Хотя первоначальный проект Джеффа был сосредоточен на GNSS-модуле Waveshare L76K, я адаптировал эту сборку для использования стандартного GPS-модуля GY-NEO6MV2 и обычного ЖК-экрана 16x2 (с модулем I2C) для получения четкого и читаемого изображения.
Поддержите меня, используя мой реферальный код на веб-сайте Prusa: @maxcou_485438.
Необходимое оборудование
Чтобы построить это, вам понадобится:
Малиновый Пи Пико (или Пико W)
GPS-модуль GY-NEO6MV2 (с внешней антенной)
ЖК-дисплей 16x2 (с рюкзаком I2C/интерфейсом)
Система мини-стойки 1U (эта лицевая панель спроектирована так, чтобы соответствовать стандартным монтажным отверстиям мини-стойки 1U)
x12 Винты M2 для крепления внутренней электроники
x4 Винты M3 для крепления корпуса
Настройки печати
Материал: PLA или PETG (я использовал PETG).
Заполнение: 15-20%
Поддержка: поддержка не требуется, уже интегрирована в модель Front_1U_TimeGPS для поддержки Raspberry Pi Pico (необходимо снять, чтобы можно было установить разъем micro-USB Pico)
Высота слоя: 0,2 мм
Настройка и код
Я использовал micropyGPS, RPI-PICO-I2C-LCD для обработки данных GPS NMEA и отображения I2C.
Примечание. Убедитесь, что ваша GPS-антенна обеспечивает хороший обзор неба или расположена рядом с окном, чтобы обеспечить захват спутника!
из импорта машины UART, Pin, I2C
из micropyGPS импортировать MicropyGPS
из pico_i2c_lcd импортировать I2cLcd
время импорта
# — 1. ЖК-дисплей НАСТРОЙКИ (I2C1 для контактов 26/27) ---
i2c = I2C(1, sda=Вывод(26), scl=Вывод(27), частота=400000)
ЖК = I2cLcd(i2c, 0x27, 2, 16)
# — 2. НАСТРОЙКА GPS ---
gps_uart = UART(0, скорость передачи данных=9600, tx=Pin(0), rx=Pin(1))
my_gps = MicropyGPS(location_formatting='dd')
# — 3. КОНФИГУРАЦИЯ ---
TIMEZONE_OFFSET = -5
Had_fix = Ложь
display_cycle = 0 # Какое значение показывать (0-3)
Loop_counter = 0 # Отслеживает количество пройденных циклов по 0,5 с.
HOLD_TIME = 20 # 20 циклов * 0,1 с = 2 секунды на значение
Защиту get_local_datetime (gps_obj, смещение):
d = gps_obj.date
t = gps_obj.timestamp
попробуйте:
utc_tuple = (2000 + d[2], d[1], d[0], int(t[0]), int(t[1]), int(t[2]), 0, 0)
utc_секунды = time.mktime(utc_tuple)
local_секунды = utc_секунды + (смещение * 3600)
вернуть time.localtime(local_секунды)
кроме:
возврат Нет
print(«Система запускается… Поиск спутников (NEO-6M)»)
ЖК.очистить()
lcd.putstr(«Поиск GPS...»)
пока правда:
если gps_uart.any():
raw_data = gps_uart.read()
для b в raw_data:
попробуйте:
my_gps.update(chr(b))
кроме:
продолжать
если my_gps.fix_type < 3 и has_fix:
print("\n[!] Исправление 3D потеряно.")
ЖК.очистить()
lcd.putstr(«Исправление потеряно»)
Had_fix = Ложь
elif my_gps.fix_type == 3 и не Had_fix:
print("\n[OK] Исправление 3D получено!")
ЖК.очистить()
Had_fix = Истина
если my_gps.fix_type == 3:
local = get_local_datetime(my_gps, TIMEZONE_OFFSET)
если местный:
# Подготовьте временную метку терминала
timestamp = "{:04}-{:02}-{:02} {:02}:{:02}:{:02}".format(
локальный[0], локальный[1], локальный[2], локальный[3], локал��ный[4], локальный[5]
)
# — РЯД 1 ЖК-дисплея: Постоянное время ---
жк.move_to(0, 0)
lcd.putstr("{:02}:{:02}:{:02} ".format(local[3], local[4], local[5]))
# — РЯД ЖК-дисплея 2: Управляемое вращение ---
# Мы обновляем содержимое строки 2 только в том случае, если достигнуто значение HOLD_TIME.
если счетчик_цикла == 0:
жк.move_to(0, 1)
lcd.putstr(" ") # Очистить строку
жк.move_to(0, 1)
если display_cycle == 0:





























