Spisu treści:

Retro synteza mowy. Część: 12 IoT, automatyka domowa: 12 kroków (ze zdjęciami)
Retro synteza mowy. Część: 12 IoT, automatyka domowa: 12 kroków (ze zdjęciami)

Wideo: Retro synteza mowy. Część: 12 IoT, automatyka domowa: 12 kroków (ze zdjęciami)

Wideo: Retro synteza mowy. Część: 12 IoT, automatyka domowa: 12 kroków (ze zdjęciami)
Wideo: Synteza mowy na Commodore 64 (RG#12) 2024, Lipiec
Anonim
Image
Image
Retro synteza mowy. Część: 12 IoT, automatyka domowa
Retro synteza mowy. Część: 12 IoT, automatyka domowa

Ten artykuł jest dwunastym z serii instrukcji dotyczących automatyki domowej, dokumentujących, jak stworzyć i zintegrować urządzenie do retrospekcji mowy IoT z istniejącym systemem automatyki domowej, w tym wszystkie niezbędne funkcje oprogramowania, aby umożliwić pomyślne wdrożenie w środowisku domowym.

Zdjęcie 1 pokazuje ukończone urządzenie syntezatora mowy IoT, a zdjęcie 2 pokazuje wszystkie części składowe użyte w prototypie, które zostały zredukowane do produktu końcowego.

Film pokazuje urządzenie w akcji (podczas testów).

Wstęp

Jak wspomniano powyżej, ta instrukcja zawiera szczegółowe informacje, jak zrobić urządzenie do syntezy mowy w stylu retro IoT i opiera się na General Instruments SP0256-AL2.

Jego głównym celem jest dodanie „starej szkoły” syntezy głosu do sieci IoT. Dlaczego „stara szkoła” możesz zapytać? Cóż, ponieważ byłem w latach 80-tych, kiedy te rzeczy zostały wyprodukowane po raz pierwszy i podłączyłem jeden do mojego BBC Micro, więc dla mnie jest pewien stopień nostalgii wokół SP0256-AL2.

Zdecydowanie wolę wyzwanie, jakim jest próba zrozumienia, co do diabła mówi ten brzmiący głos Daleka, niż słuchanie łagodnych tonów hipsterskiego Amazon echo lub Siri. Gdzie jest wyzwanie, o które cię pytam?

Aha, nie wspominając już o tym, że mam też „ładunek worka” układów scalonych „SP0256-AL2”.

Urządzenie jest również w stanie odczytywać lokalną temperaturę i wilgotność, więc dodatkowo rozszerza oprzyrządowanie otoczenia mojej istniejącej infrastruktury IoT, podłączając się do sieci IoT opartej na MQTT/OpenHAB, szczegółowo opisanej w tej serii dotyczącej automatyki domowej (HA), opierając się na ponownie wykorzystanym kodzie zaczerpniętym stąd.

Jego sercem jest ESP8266-07, który odpowiada za komunikację MQTT i sterowanie wszystkimi funkcjami systemu (dostęp do karty SD, sterowanie diodami, wykrywanie temperatury/wilgotności, regulacja głośności, synteza mowy). Urządzenie jest w pełni konfigurowalne za pomocą plików tekstowych przechowywanych na lokalna karta SD, chociaż parametry kalibracji i bezpieczeństwa sieci można również programować za pomocą zdalnych publikacji MQTT.

Jakich części potrzebuję?

Zobacz listę materiałów tutaj

Jakiego oprogramowania potrzebuję?

  • Arduino IDE 1.6.9,
  • Arduino IDE skonfigurowane do programowania ESP8266-07 (tak samo jak to). Następnie skonfiguruj IDE zgodnie ze szczegółowym opisem zawartym w szkicu oprogramowania tutaj,
  • Python v3.5.2, jeśli chcesz korzystać z funkcji automatycznego testowania, szczegóły tutaj

Jakich narzędzi potrzebuję?

  • Mikroskop minimum x3 (do lutowania SMT),
  • zaciskarka do złączy Molex (do złącz JST),
  • Lutownica SMD (z płynnym topnikiem i lutem proszkowym),
  • Wkrętaki (różne),
  • Opalarka,
  • Wiertła (różne),
  • Pogłębiacz ręczny,
  • Pliki (różne),
  • Dremel (różne bity),
  • Solidne imadło (małe i duże, jak czarny i decker towarzysz pracy),
  • Skalpel,
  • Suwmiarki noniuszowe (stosowane do pomiaru produkcji i przydatne do wymiarowania elementów PCB),
  • klucze i klucze nasadowe (różne),
  • Mocna pęseta (do lutowania SMT),
  • Młodsza piła do metalu,
  • Wiertarka (z różnymi wiertłami),
  • Cienkie szczypce (szpiczaste i półokrągłe),
  • frezy do płukania,
  • multimetr cyfrowy z akustyczną kontrolą ciągłości,
  • Dwukanałowy oscyloskop cyfrowy (przydatny do debugowania sygnałów)

Jakich umiejętności potrzebuję?

  • Dużo cierpliwości,
  • Duża sprawność manualna i doskonała koordynacja ręka-oko,
  • Doskonałe umiejętności lutowania,
  • Doskonałe umiejętności produkcyjne,
  • Możliwość wizualizacji w 3 wymiarach,
  • Trochę wiedzy o tworzeniu oprogramowania w 'C' (jeśli chcesz zrozumieć kod źródłowy),
  • Trochę znajomości Pythona (jak instalować i uruchamiać skrypty, jeśli chcesz korzystać z automatycznego testowania),
  • Znajomość Arduino i jego IDE,
  • Dobra znajomość elektroniki,
  • Trochę zrozumienia sieci domowej.

Omawiane tematy

  • Instrukcja obsługi
  • Przegląd obwodu
  • Produkcja i montaż PCB
  • Produkcja
  • Przegląd systemu oprogramowania
  • Przegląd oprogramowania
  • Kalibracja czujnika
  • Konwencja nazewnictwa tematów MQTT
  • Debugowanie i wyszukiwanie usterek
  • Testowanie projektu
  • Wniosek
  • Użyte referencje

Series LinksTo Part 11: Konsola pulpitu IoT. Część: 11 IoT, automatyka domowa

Krok 1: Instrukcja obsługi

Instrukcja obsługi
Instrukcja obsługi
Instrukcja obsługi
Instrukcja obsługi
Instrukcja obsługi
Instrukcja obsługi

Zdjęcie 1 powyżej pokazuje przód Retro syntezatora mowy, a zdjęcie 2 tył.

Przód obudowy

  1. Kratka głośnika
  2. Gniazdo słuchawkowe 3,5 mm: Główny głośnik jest wyłączony po włożeniu gniazda 3,5 mm.
  3. Czerwona dioda: Ta dioda świeci się, gdy wypowiadane jest słowo, gdy mowa została zainicjowana przez żądanie
  4. Niebieska dioda LED: Ta dioda LED świeci podczas wypowiadania słowa, gdy mowa została zainicjowana przez żądanie MQTT IoT.

Obudowa tylna

  1. Przycisk resetowania: służy do twardego resetu urządzenia ESP8266-07 IoT.
  2. Przycisk lampy błyskowej: używany w połączeniu z przyciskiem resetowania umożliwia ponowne miganie ESP8266-07.
  3. Wtyczka anteny WiFi (wtyczka SMA): Do zewnętrznej anteny WiFi dająca najmniejsze tłumienie ścieżki RF, ponieważ zamknięcie jest aluminiowe.
  4. Zewnętrzny port programowania: aby wyeliminować potrzebę odkręcania obudowy w celu uzyskania dostępu do ESP8266-07 w celu ponownego programowania. Piny programujące ESP8266-07 zostały wyprowadzone na zewnętrzny port programowania. Zdjęcie 3 to adapter do programowania.
  5. Zielona dioda LED: Jest to dioda LED systemu IoT i służy do wskazywania statusu diagnostycznego urządzenia oraz uruchamiania i działania.
  6. Zewnętrzny czujnik temperatury/wilgotności (AM2320)
  7. Gniazdo kart SD: Zawiera wszystkie dane konfiguracyjne/zabezpieczające wraz ze stronami serwera WWW.
  8. Gniazdo zasilania 2,1 mm 6 VDC

Krok 2: Przegląd obwodu

Przegląd obwodu
Przegląd obwodu
Przegląd obwodu
Przegląd obwodu

Urządzenie Retro Speech Synth składa się z dwóch płytek drukowanych;

  • RetroSpeechSynthIoTBBoard: jest to ogólna, wielokrotnego użytku płytka PCB ESP8266-07/12/12E/13
  • RetroSpeechSynthBoard: jest to ogólna płytka PCB SP0256-AL2.

Tablica IoT z syntezatorem mowy w stylu retro

Ta płytka umożliwia bezpośrednie lutowanie gniazd ESP8266-07/12/12E/13 lub 0,1 mieszczących płytkę nośną ESP8266.

Płytka została zaprojektowana w celu rozszerzenia jej I/O przez połączenie I2C i może obsługiwać poziomy zasilania 3v3 lub 5v przez Q1, Q2, R8-13.

Połączenie z płytą uzyskuje się za pomocą jednego z dwóch złączy J2 i J4, 8-stykowej wstążki DIL IDC lub 5-stykowej JST/Molex.

U2 i U3 zapewniają regulację zasilania 3,3 V i 5 V na pokładzie. Alternatywnie, jeśli wymagana jest większa wydajność prądowa, zewnętrzne szeregowe regulatory bocznikowe można podłączyć odpowiednio przez złącza J10 i J11.

Złącza J1 i J3 oferują obsługę zewnętrznych kart SD przez SPI. J1 został zaprojektowany dla 8-stykowego Molexa, a J3 ma bezpośredni pin do obsługi kompatybilności pinów dla gotowej płytki PCB karty SD z obsługą 3v3 lub 5v.

Syntezator mowy w stylu retro

Sterowanie tą płytą odbywa się za pomocą połączenia zgodnego z I2C 5v za pośrednictwem J1, J5 lub J6, 4-stykowego JST/Molex, 8-stykowego DIL IDC lub 8-stykowego złącza wstążki IDC.

U2 MPC23017 zapewnia interfejs równoległy I2C do U3 SP0256-AL2 i diody LED D1 (zielona), D2 (czerwona) i D3 (niebieska). Wyjście syntezatora mowy jest podawane do wzmacniacza audio CR1 TBA820M przez potencjometr analogowy RV1 lub potencjometr cyfrowy U1 MCP4561.

Digital Pot U1 jest również sterowany przez I2C zgodne z 5V.

Uwaga: Wybrano urządzenie ESP8266-07, ponieważ ma ono zintegrowane złącze IPX RF umożliwiające dodanie zewnętrznej anteny WiFi do aluminiowej obudowy.

Krok 3: Produkcja i montaż PCB

Produkcja i montaż PCB
Produkcja i montaż PCB
Produkcja i montaż PCB
Produkcja i montaż PCB
Produkcja i montaż PCB
Produkcja i montaż PCB
Produkcja i montaż PCB
Produkcja i montaż PCB

Zdjęcia 1 i 2 przedstawiają gotowe i okablowane podzespoły PCB umieszczone na aluminiowym podłożu obudowy.

Dwie płytki PCB zostały zaprojektowane przy użyciu programu Kicad v4.0.7, wyprodukowanego przez JLCPCB i zmontowanego przeze mnie i pokazanego powyżej na rysunkach 3 do 13.

Krok 4: Produkcja

Produkcja
Produkcja
Produkcja
Produkcja
Produkcja
Produkcja

Zdjęcie 1 przedstawia układ w stylu Haynes Manual wszystkich prefabrykowanych części przed ostatecznym montażem.

Zdjęcia 2…5 pokazują różne ujęcia podczas produkcji obudowy z minimalnymi prześwitami.

Krok 5: Przegląd systemu oprogramowania

Przegląd systemu oprogramowania
Przegląd systemu oprogramowania
Przegląd systemu oprogramowania
Przegląd systemu oprogramowania

To urządzenie do retrospekcji mowy IoT zawiera sześć kluczowych komponentów oprogramowania, jak pokazano na rysunku 1 powyżej.

Karta SD

Jest to zewnętrzny system archiwizacji SD SPI Flash i służy do przechowywania następujących informacji (patrz rysunek 2 powyżej);

  • Ikony i „Strona główna konfiguracji syntezatora mowy” index.htm: Obsługiwane przez urządzenie IoT, gdy nie może połączyć się z siecią IoT WiFi (zwykle z powodu nieprawidłowych informacji o zabezpieczeniach lub pierwszego użycia) i zapewnia użytkownikowi środki zdalnej konfiguracji czujników bez konieczności ponownego flashowania nowej zawartości SD. Zawiera również index1.htm, mqtt.htm i sp0256.htm, są to lokalnie obsługiwane strony internetowe dostępne przez przeglądarkę internetową, co pozwala na ograniczoną kontrolę syntezatora mowy przez
  • Informacje o zabezpieczeniach: Zawiera informacje używane podczas uruchamiania przez urządzenie IoT do łączenia się z siecią IoT Wi-Fi i brokerem MQTT. Informacje przesłane za pośrednictwem „Strony głównej konfiguracji syntezatora mowy” są zapisywane w tym pliku („secvals.txt”).
  • Informacje o kalibracji: Informacje zawarte w plikach ('calvals1.txt' i 'calvals2.txt') służą do kalibracji wbudowanych czujników temperatury/wilgotności, jeśli jest to konieczne. Stałe kalibracji można zapisać w urządzeniu IoT za pomocą poleceń MQTT od brokera MQTT lub przez ponowne flashowanie karty SD. 'calvals1.txt' odnosi się do czujnika AM2320, a 'calvals2.txt' do DHT22.
  • Wartości systemowe konfigurowane przez użytkownika: Informacje zawarte w tym pliku ('confvals.txt'), wybrane przez użytkownika, kontrolują pewne odpowiedzi systemu, takie jak początkowy poziom głośności cyfrowej, automatyczne powiadomienie o gotowości systemu w ramach subskrypcji brokera MQTT itp.

Serwer mDNS

Ta funkcja jest wywoływana, gdy urządzenie IoT nie może połączyć się z siecią Wi-Fi jako stacją Wi-Fi i zamiast tego stało się punktem dostępu Wi-Fi, podobnym do domowego routera Wi-Fi. W przypadku takiego routera zazwyczaj łączysz się z nim, wpisując adres IP podobny do 192.168.1.1 (zwykle wydrukowany na etykiecie umieszczonej na pudełku) bezpośrednio w pasku adresu przeglądarki, po czym otrzymujesz stronę logowania do wprowadzenia nazwę użytkownika i hasło umożliwiające konfigurację urządzenia. W przypadku ESP8266-07 w trybie AP (tryb punktu dostępu) urządzenie domyślnie przyjmuje adres IP 192.168.4.1, jednak przy uruchomionym serwerze mDNS wystarczy wpisać przyjazną dla człowieka nazwę „SPEECHSVR.local” w pasku adresu przeglądarki, aby zobacz 'Strona główna konfiguracji syntezatora mowy'.

Klient MQTT

Klient MQTT zapewnia wszystkie niezbędne funkcje; połącz się ze swoją siecią IoT brokerem MQTT, zasubskrybuj wybrane tematy i opublikuj ładunki dla danego tematu. Krótko mówiąc, zapewnia podstawową funkcjonalność IoT.

Serwer WWW

Ten serwer sieciowy ma dwa cele;

  1. Jeśli urządzenie IoT nie może połączyć się z siecią Wi-Fi, której identyfikator SSID, P/W itp. jest zdefiniowany w pliku informacji o zabezpieczeniach przechowywanym na karcie SD, urządzenie stanie się punktem dostępu. Po podłączeniu do sieci Wi-Fi dostarczanej przez punkt dostępowy, obecność serwera WWW HTTP pozwala na bezpośrednie połączenie z urządzeniem i zmianę jego konfiguracji za pomocą przeglądarki internetowej HTTP, której celem jest obsługa „Konfiguracji syntezatora mowy Strona internetowa „Strona główna”, która jest również przechowywana na karcie SD.
  2. Gdy urządzenie IoT Retro Speech Synthesis połączy się z siecią Wi-Fi i brokerem MQTT, jeśli uzyskano dostęp, serwer WWW HTTP automatycznie wyświetli stronę internetową HTTP, umożliwiając ograniczoną kontrolę urządzenia IoT w celu wypowiedzenia wybranych stałych fraz i możliwość przełącz dwie przednie czerwone i niebieskie diody LED.

Stacja Wi-Fi

Ta funkcja daje urządzeniu IoT możliwość łączenia się z domową siecią Wi-Fi przy użyciu parametrów w pliku informacji bezpieczeństwa, bez tego Twoje urządzenie IoT nie będzie w stanie subskrybować/publikować u brokera MQTT.

Punkt dostępu Wi-Fi

Możliwość zostania WiFi Access Point to sposób, w jaki urządzenie IoT pozwala na łączenie się z nim i dokonywanie zmian konfiguracyjnych za pośrednictwem stacji WiFi i przeglądarki (np. Safari na Apple iPad). Ten punkt dostępu rozgłasza identyfikator SSID = „SPEECHSYN” + ostatnie 6 cyfr adresu MAC urządzenia IoT. Hasło do tej zamkniętej sieci nosi urojoną nazwę „PASSWORD”

Krok 6: Przegląd oprogramowania

Przegląd oprogramowania
Przegląd oprogramowania
Przegląd oprogramowania
Przegląd oprogramowania
Przegląd oprogramowania
Przegląd oprogramowania

Preambuła

Aby pomyślnie skompilować ten kod źródłowy, będziesz potrzebować lokalnej kopii kodu i bibliotek opisanych poniżej w kroku 12, Użyte referencje. Jeśli nie jesteś pewien, jak zainstalować bibliotekę Arduino, przejdź tutaj.

Przegląd

Oprogramowanie korzysta z maszyny stanu, jak pokazano na zdjęciu 1 powyżej (pełna kopia źródła w moim repozytorium GitHub tutaj). Istnieje 5 głównych stanów opisanych poniżej;

  • W TYM

    Ten stan inicjalizacji jest pierwszym stanem wprowadzonym po włączeniu zasilania

  • NOCONFIG

    Ten stan jest wprowadzany, jeśli po włączeniu zostanie wykryty nieprawidłowy lub brakujący plik secvals.txt. W tym stanie widoczna jest Strona Konfiguracji

  • OCZEKUJĄCY NW

    Ten stan jest przejściowy, wprowadzony, gdy nie ma połączenia z siecią Wi-Fi

  • OCZEKUJĄCE MQTT

    Ten stan jest przejściowy, wprowadzony po nawiązaniu połączenia z siecią Wi-Fi i gdy w tej sieci nie ma połączenia z brokerem MQTT

  • AKTYWNY

    Jest to normalny stan operacyjny wprowadzony po ustanowieniu połączenia sieci WiFi i połączenia z brokerem MQTT. To właśnie w tym stanie temperatura, wskaźnik ciepła i wilgotność w urządzeniu IoT Retro Speech Synthesis są regularnie publikowane dla brokera MQTT. W tym stanie widoczna jest strona główna syntezatora mowy

Zdarzenia sterujące przejściami między stanami są opisane na rys. 1 powyżej. Przejścia między stanami są również regulowane przez następujące parametry SecVals;

  • Adres IP pierwszego brokera MQTT. W postaci dziesiętnej z kropkami AAA. BBB. CCC. DDD
  • Drugi port brokerski MQTT. W postaci liczb całkowitych.
  • Trzecie połączenie MQTT Broker próbuje nawiązać przed przełączeniem z trybu STA do trybu AP. W postaci liczb całkowitych.
  • SSID czwartej sieci WiFi. W dowolnym tekście.
  • 5. Hasło do sieci WiFi. W dowolnym tekście.

Jak wspomniano powyżej, jeśli urządzenie IoT nie może połączyć się jako stacja WiFi z siecią WiFi, której SSID i P/W są zdefiniowane w secvals.txt na karcie SD, urządzenie IoT stanie się punktem dostępowym. Po podłączeniu do tego punktu dostępowego, wyświetli "Strona główna konfiguracji syntezatora mowy", jak pokazano powyżej na Rysunku 2 (poprzez wpisanie "SPEECHSVR.local" lub 192.168.4.1 w pasku adresu przeglądarki). Ta strona główna umożliwia rekonfigurację urządzenia IoT Retro Speech Synthesis Device za pośrednictwem przeglądarki

Dostęp zdalny w stanie AKTYWNY

Po połączeniu z brokerem MQTT możliwe jest również ponowne kalibrowanie i rekonfiguracja urządzenia za pośrednictwem publikacji tematycznych MQTT. Plik calvals.txt ma dostęp R/W, a secvals.txt ma dostęp tylko do zapisu.

Jak wspomniano powyżej, w trybie aktywnym można uzyskać dostęp do syntezatora mowy przez interfejs HTTP, wpisując „SPEECHSVR.local” lub 192.168.4.1 w pasku adresu przeglądarki. Ten interfejs oparty na HTTP pozwala na podstawową kontrolę syntezatora mowy. Zdjęcia 3, 4 i 5 pokazują dostępne strony internetowe.

Debugowanie użytkownika

Podczas sekwencji rozruchowej zielona dioda System urządzenia IoT z tyłu obudowy daje następujące informacje zwrotne dotyczące debugowania;

  • 1 krótki błysk: brak pliku konfiguracyjnego na karcie SD (secvals.txt)
  • 2 krótkie mignięcia: urządzenie IoT próbuje połączyć się z siecią Wi-Fi
  • Ciągłe podświetlenie: urządzenie IoT próbuje połączyć się z brokerem MQTT
  • Off: Urządzenie jest aktywne.

Funkcjonalność urządzenia IoT do retrosyntezy mowy w stanie AKTYWNYM

W stanie AKTYWNYM ESP8266 wchodzi w ciągłą pętlę wywołując następujące funkcje; timer_update(), checkTemperatureAndHumidity() i handleSpeech(). Wynik netto ma na celu przedstawienie użytkownikowi interfejsu HTTP lub MQTT, bezproblemową obsługę wbudowanego procesora mowy z fonemami na żądanie i publikowanie lokalnych wartości parametrycznych otoczenia przez MQTT.

Pełna lista wszystkich subskrypcji tematów i publikacji, w tym wartości ładunku, jest zawarta w kodzie źródłowym.

Krok 7: Kalibracja czujnika

Kalibracja czujnika
Kalibracja czujnika

Po uruchomieniu urządzenia IoT w ramach sekwencji rozruchowej z karty SD odczytywane są dwa pliki o nazwach „cavals1.txt” i „cavals2.txt”.

Zawartość tych plików to stałe kalibracyjne, jak wskazano powyżej na rys. 1.

  1. 'cavals1.txt': Używany przez zewnętrzny AM2320
  2. 'cavals2.txt': Używany przez wewnętrzny DHT22

Te stałe kalibracyjne są używane do dostosowania odczytów uzyskanych z dwóch czujników w celu dostosowania ich do urządzenia odniesienia. Istnieje jeszcze jedna wartość, która definiuje strategię raportowania dla każdego urządzenia i jest opisana poniżej wraz z procedurą kalibracji czujników.

Strategia raportowania

Ten parametr określa sposób, w jaki czujnik zdalny zgłasza wszelkie lokalne zmiany parametrów otoczenia. Jeśli zostanie wybrana wartość 0, zdalny czujnik będzie publikował wszelkie zmiany temperatury lub wilgotności, jakie zauważy, za każdym razem, gdy odpowiedni czujnik zostanie odczytany (co około 10 sekund). Każda inna wartość opóźni publikację zmiany o 1…60 minut. Modyfikacja tego parametru pozwala na optymalizację ruchu sieciowego MQTT. Należy zauważyć, że dane temperatury i wilgotności z DHT22 są odczytywane naprzemiennie ze względu na ograniczenia czujnika.

Kalibracja temperatury

Aby skalibrować czujnik temperatury, wykonałem ten sam proces, jak opisano w kroku 4, ponownie stosując prostą zależność y=mx+c. Jako urządzenia referencyjnego użyłem czujnika temperatury i wilgotności IoT #1. Wartości z czujnika podane są w stopniach Celsjusza.

Kalibracja wilgotności

Ponieważ nie posiadam żadnych środków do dokładnego rejestrowania lub nawet kontrolowania lokalnej wilgotności otoczenia, do kalibracji czujnika zastosowałem podobne podejście do powyższego kroku 4, ponownie używając czujnika nr 1 jako odniesienia. Jak już wspomniałem, niedawno znalazłem w sieci świetny artykuł opisujący, jak kalibrować czujniki wilgotności. Być może w przyszłości spróbuję tego podejścia. Wartości z czujnika podane są w % wieku wilgotności względnej.

Krok 8: Konwencja nazewnictwa tematów MQTT

Konwencja nazewnictwa tematów MQTT
Konwencja nazewnictwa tematów MQTT
Konwencja nazewnictwa tematów MQTT
Konwencja nazewnictwa tematów MQTT

Jak wspomniano we wcześniejszym Instructable (tutaj), zdecydowałem się na konwencję nazewnictwa tematów opisaną na pic 1 powyżej.

Mianowicie „AccessMethod/DeviceType/WhichDevice/Action/SubDevice” Nie jest idealny, ale pozwala na zastosowanie przydatnych filtrów, aby zobaczyć wszystkie wyjścia czujników dla danego parametrycznego tematu, co pozwala na łatwe porównanie, jak na ryc. 2 powyżej z MQTTSpy.

Ten projekt jest pierwszą instancją, w której jedno urządzenie zawiera więcej niż jedno źródło pochodzenia tego samego typu publikacji. tj. Dwa czujniki temperatury/wilgotności z podurządzeń wewnętrznych i zewnętrznych.

Obsługuje również w miarę rozszerzalne logiczne grupy funkcjonalności w ramach danego urządzenia IoT.

Wdrażając te tematy w oprogramowaniu, użyłem zakodowanych ciągów tematów ze stałymi, osadzonymi identyfikatorami numerycznymi dla każdego urządzenia, w przeciwieństwie do dynamicznego generowania tematów w czasie wykonywania, aby zaoszczędzić na pamięci RAM i utrzymać wysoką wydajność.

Uwaga: Jeśli nie masz pewności, jak korzystać z MQTTSpy, zobacz tutaj „Konfigurowanie brokera MQTT. Część 2: IoT, automatyka domowa”

Krok 9: Debugowanie i znajdowanie usterek

Debugowanie i wyszukiwanie usterek
Debugowanie i wyszukiwanie usterek

Ogólnie rzecz biorąc, w przypadku moich hobbystycznych projektów, tam gdzie to możliwe, buduję reprezentatywny prototyp sprzętu, na podstawie którego tworzone jest oprogramowanie, rzadko mam problemy z integracją oprogramowania z ostateczną platformą sprzętową.

Jednak przy tej okazji natknąłem się na dziwną przerywaną usterkę, w której niektóre fonemy brzmiały, a inne nie.

Po wstępnym debugowaniu płytki drukowanej Speech Synth przy użyciu Arduino Uno w celu uzyskania fonemów i udowodnienia, że ta płyta działa, zbadałem linie I2C między płytką IoT a płytką Speech Synth. Zobacz Rysunek 1 powyżej.

Na śladach wyraźnie widać „ząb piły”/wykładniczy brzeg sygnału I2C.

Jest to zwykle wskazanie, że wartości podciągania I2C są zbyt wysokie, co uniemożliwia wystarczająco szybkie przywrócenie napięcia linii w otwartym obwodzie drenu.

Jako „obejście” połączyłem dwa rezystory podciągające smt R12 i R13 z 10Ks, aby uzyskać 4K7 i na pewno Speech Synth „buchnął do życia”

Ten rodzaj niepowodzenia jest odwrotnością tego, co może się zdarzyć podczas debugowania tego typu projektów. Ogólnie rzecz biorąc, większość modułów opartych na I2C zakupionych w serwisie Ebay ma zwykle zamontowane podciągi 10K lub 4K7. Jeśli zamierzasz użyć >5 modułów I2C, każdy z podciąganiem 4K7, to całkowite obciążenie wynosi 940R, co będzie zbyt duże dla stopnia wyjściowego mastera. Rozwiązaniem byłoby odlutowanie wszystkich oprócz jednego zestawu rezystorów podciągających na każdym module. Najlepiej fizycznie najdalej od mistrza.

Przydatna wskazówka, o której warto pamiętać przy projektowaniu elektroniki z urządzeniami I2C.

Krok 10: Testowanie projektu

Image
Image
Testowanie projektu
Testowanie projektu
Testowanie projektu
Testowanie projektu

Testowanie przeprowadzono przy użyciu dwóch metodologii; Ręczny i zautomatyzowany.

Pierwszym, ręcznym i ogólnie używanym podczas początkowego tworzenia kodu było użycie MQTT Spy do sprawdzenia wszystkich dostępnych subskrybowanych tematów i sprawdzenia opublikowanych odpowiedzi (przedstawionych na ryc. 2 powyżej). Ponieważ jest to proces ręczny, może być czasochłonny i podatny na błędy w miarę postępu tworzenia kodu, chociaż ręczne wykonanie umożliwia pokrycie 100%.

MQTTSpy został wybrany do testów ręcznych, ponieważ jest doskonałym narzędziem do ręcznego formatowania danego ładunku i łatwego publikowania go w dowolnym temacie. Wyświetla również przejrzysty dziennik ze znacznikiem czasu, który jest bardzo przydatny do debugowania (rys. 3 powyżej).

Drugie, zautomatyzowane podejście zostało przyjęte, ponieważ kod źródłowy stał się bardziej złożony (>3700 linii). Większa złożoność oznacza dłuższe ręczne cykle testowania i bardziej złożone testy. Aby poprawić wiarygodność, determinizm i jakość testów, zastosowano testowanie automatyczne za pośrednictwem wykonawczego testu w Pythonie (rys. 1). Zobacz krok 10 w tej instrukcji, aby dowiedzieć się, jak wprowadzono testowanie automatyczne. Pełna kopia testów automatycznych wykorzystywanych w tej instrukcji jest dostępna tutaj.

Film przedstawiający zautomatyzowaną sekwencję testową w działaniu pokazano powyżej. Sekwencja wykonuje następujące kroki;

  • Zautomatyzowane przez MQTT

    • Połącz się ze szkieletem MQTT i ogłoś „System gotowy”
    • Ćwiczenie Zielona dioda LED
    • Ćwiczenie Czerwona dioda LED
    • Ćwiczenie Niebieska dioda LED
    • Sprawdź, czy działa cyfrowy garnek
    • Mów za pomocą fonemów
    • Mów za pomocą kodów szesnastkowych dla fonemów
    • Mów za pomocą kodów dla stałych fraz
    • Trochę zabawy z Dr Who i Dalekami.
  • Ręcznie przez

    • Ćwiczenie Niebieska dioda LED
    • Ćwiczenie Czerwona dioda LED
    • Mów ustalone frazy „Steven Quinn”, „System gotowy” i „Hello World”
    • Miej serwer HTTP, serwuj

      • Szczegóły dotyczące układu syntezatora mowy
      • Szczegóły MQTT

Krok 11: Wniosek

Wniosek
Wniosek

Chociaż wymagało to wiele wysiłku z pilnikami, wiertłami itp., zwłaszcza w przypadku maskownicy głośnika, myślę, że efekt jest estetyczny i mieści się w ładnej, małej obudowie. Mógłbym go zmniejszyć, ale musiałby przejść na jedną płytkę drukowaną i celowo podzieliłem ją na dwie, aby móc ponownie wykorzystać płytki w późniejszym terminie do innych projektów. Więc to szczęśliwy kompromis.

Oprogramowanie działa dobrze, urządzenie IoT działa już od dłuższego czasu bez żadnych problemów.

Monitorowałem temperaturę i wilgotność przez Grafana i porównywałem z urządzeniem znajdującym się w tym samym miejscu. Dwie wartości otoczenia są dobrze skorelowane, co sugeruje, że kalibracja jest rozsądna (lub przynajmniej są podobne).

Zatrzymałem się przed wdrożeniem polecenia słowa („WFD/SpeechTH/1/Word/Command”), ponieważ zabrakło mi czasu i musiałem przejść dalej. Mogę wrócić do tego ponownie, jeśli i kiedy skonfiguruję bazę danych MySQL. W tej chwili używam InfluxDB.

Krok 12: Użyte referencje

Do zestawienia tego Instructable wykorzystano następujące źródła; Kod źródłowy urządzenia IoT Retro Speech Synthesis Device (zawiera kopię wszystkiego)

https://github.com/SteveQuinn1/IoT_Retro_Speech_Synthesis_SP0256_AL2

PubSubClient.h

  • Autor: Nick O'Leary
  • Cel: Umożliwia urządzeniu publikowanie lub subskrybowanie tematów MQTT u danego brokera
  • Od:

DHT.h

  • Autor: Adafruit
  • Przeznaczenie: biblioteka Arduino dla czujników temperatury i wilgotności DHT11DHT22 itp.
  • Od:

Adafruit_AM2320.h/Adafruit_Sensor.h

  • Autor: Adafruit
  • Przeznaczenie: biblioteka Arduino dla AM2320 itp. Czujnik temperatury i wilgotności
  • Od:

MCP4561_DIGI_POT.h

  • Autor: Steve Quinn
  • Przeznaczenie: Biblioteka Arduino dla potencjometru cyfrowego MCP4561
  • Od:

Adafruit_MCP23017.h

  • Autor: Steve Quinn
  • Przeznaczenie: Biblioteka Arduino dla ekspandera portów MCP23017 I2C. To widelec GITHub firmy Adafruit-MCP23017-Arduino-Library firmy Adafruit.
  • Od:

Dla zabawy

https://haynes.com/pl-pl/

Produkcja PCB

https://jlcpcb.com/

Instalowanie dodatkowych bibliotek Arduino

https://www.arduino.cc/en/Guide/Libraries

Jak sprawdzić i skalibrować czujnik wilgotności

https://www.allaboutcircuits.com/projects/how-to-check-and-kalibrować-a-humidity-sensor/?utm_source=All+About+Circuits+Members&utm_campaign=ffee38e54-EMAIL_CAMPAIGN_2017_12_06&utm_medium=email&utm_term=0_2-5627052975c /

Karta katalogowa SP0256-AL2

https://www.futurebots.com/spo256.pdf

Sklep z chipami mowy

https://www.speechchips.com/shop/

Konkurs Arduino 2019
Konkurs Arduino 2019
Konkurs Arduino 2019
Konkurs Arduino 2019

Drugie miejsce w konkursie Arduino 2019

Zalecana: