Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
To jest podręcznik, który musiałem napisać do szkoły. Nie jest kompletny i nie jestem pewien, czy możesz z niego korzystać. Moja wiedza na temat API to absolutne minimum. Chcieliśmy stworzyć interaktywne lustro ze światłami z tyłu, które reagowałyby na pogodę, światło z zewnątrz itp.
Przyjrzałem się, jak mogę zaprogramować lampę Philips Hue za pomocą Arduino. W tym wyjaśniam wszystkie moje kroki i jak daleko zaszedłem. Nie udało mi się zaprogramować Hue za pomocą Arduino, ale myślę, że to dobry początek.
Potrzebowałem tego: Arduino lampa odcień mostek konto programisty Philips Hue
Źródła: https://www.developers.meethue.com/documentation/g…https://github.com/bsalinas/ArduinoHuehttps://arduino-esp8266.readthedocs.io/en/latest/e…https:// www.makeuseof.com/tag/control-philips-hue-…
Krok 1: Rozpocznij
Aby uzyskać dostęp do dokumentacji interfejsu API, musisz zarejestrować się jako programista. To nic nie kosztuje, ale musisz zaakceptować regulamin. Możesz to zrobić tutaj >
Krok 2: Aplikacja Hue
Pobierz oficjalną aplikację Philips Hue. Podłącz telefon do sieci, w której ma być włączony mostek Hue.
Krok 3: Podłącz mostek
Połącz swój most z siecią i działa poprawnie. Sprawdź, czy aplikacja na smartfona może sterować światłami w tej samej sieci. Musi być w tej samej sieci Wi-Fi.
Krok 4: Adres IP
Następnie musisz odkryć adres IP mostka w swojej sieci. Naciśnij link, aby połączyć się z mostkiem w aplikacji i spróbuj sterować światłami.
Krok 5:
Jeśli wszystko działa, przejdź do menu ustawień w aplikacji. Następnie przejdź do „Mój most”, przejdź do „Ustawienia sieci”. Wyłącz przełącznik DHCP, a zobaczysz adres IP mostu. Zanotuj adres IP, a następnie włącz ponownie DHCP.
Krok 6: Debuguj swój odcień
Kiedy to zapisałeś, musisz debugować swój Hue. Do tego kroku potrzebny jest adres IP. Musisz odwiedzić następną stronę.
/debug/clip.html
Interfejs będzie wyglądał tak na obrazku. Jest to podstawa całego ruchu internetowego i interfejsu Hue RESTful.
Otrzymałem te informacje o interfejsie Restful witryny Philips Hue.
URL: jest to w rzeczywistości lokalny adres określonego zasobu (rzeczy) w systemie hue. Może to być światło, grupa świateł lub wiele innych rzeczy. To jest obiekt, z którym będziesz wchodzić w interakcję w ramach tego polecenia.
Ciało: to ta część wiadomości, która opisuje, co i jak chcesz zmienić. Tutaj wpisujesz w formacie JSON nazwę zasobu i wartość, którą chcesz zmienić/dodać.
Metoda: tutaj masz do wyboru 4 metody HTTP, których może użyć wywołanie hue.
GET: jest to polecenie do pobrania wszystkich informacji o adresowanym zasobie
PUT: jest to polecenie modyfikacji zaadresowanego zasobu
POST: jest to polecenie utworzenia nowego zasobu wewnątrz zaadresowanego zasobu
DELETE: jest to polecenie usunięcia zaadresowanego zasobu Odpowiedź: W tym obszarze zobaczysz odpowiedź na swoje polecenie. Również w formacie JSON.
Krok 7: Zacznijmy
Teraz potrzebujemy losowo wygenerowanej nazwy użytkownika, którą tworzy dla Ciebie most. Otrzymasz jeden, wypełniając to.
Wpisz adres URL:
/api/
Włóż do CIAŁA:
i naciśnij GET
To polecenie zasadniczo mówi „proszę, utwórz nowy zasób w /api” (gdzie znajdują się nazwy użytkowników) z następującymi właściwościami. Na początku pojawi się błąd, a to dlatego, że jest to krok bezpieczeństwa Philips Hue. Wciskając przycisk udowadniają, że masz fizyczny dostęp do mostu.
Krok 8:
Teraz naciśnij przycisk na mostku i ponownie kliknij POST.
Teraz otrzymasz nazwę użytkownika, którą stworzył dla Ciebie most.
Krok 9: Zróbmy coś ze światłami
Skopiuj swoją nazwę użytkownika i umieść ją w następującej linii.
Umieść to w swoim adresie URL
/api//światła
Naciśnij POBIERZ
Powinieneś otrzymać odpowiedź JSON ze wszystkimi światłami w twoim systemie i ich nazwami.
Krok 10:
Pożyczyłem trochę świateł Hue ze szkoły, używam tej o id 3. Chcę uzyskać szczegółowe informacje o tym świetle.
Umieść to obok adresu URL, który już masz:
/api//światła/3
Naciśnij POBIERZ
Teraz otrzymasz wszystkie informacje o Led 3 (jeśli masz inny numer, taki jak 1, zobaczysz informacje o tym).
Krok 11: Kontrolujmy światło
Widzisz w "stanie", że moja dioda jest "włączona". Chcemy sterować światłem w „stanie”.
Umieść to obok adresu URL, który już masz: https:// /api/ /lights/ 3/ state
Umieść następną linię w BODY
Naciśnij
Teraz twoje światło zgaśnie! Zmień wartość w body na true, a światło ponownie się włączy.
Krok 12:
Teraz wszystko działa, chcę to zrobić z moim Arduino. Spojrzałem na link, który podał Philips Hue, aby zmienić kolor światła. Ale potrzebujesz do tego Pythona, nigdy nie pracowałem z Pythonem, więc szukałem czegoś innego.
Jeśli chcesz spojrzeć na ten kod, mam link do Github tutaj:
github.com/bsalinas/ArduinoHue
Krok 13:
Sprawdziłem, jak mogę uzyskać informacje z tej strony programisty na moje arduino. Przez większość czasu nie rozumiałem języka. Ale znalazłem kod na stronie Jamesa Bruce'a.
To jest link do strony.
www.makeuseof.com/tag/control-philips-hue-lights-arduino-and-motion-sensor/
Krok 14:
Najpierw zobaczyłem, że używa kabla Ethernet. Miałem tylko żarówkę Hue Light i mostek Arduino oraz niewielkie zrozumienie kodu. Trochę mi zajęło zrozumienie jego kodu, ale nadal go nie rozumiem.
Najpierw dodałem tę bibliotekę do internetu.
#włączać
To jest dla Twojej sieci (musi być taka sama jak żarówka Hue Light)
const char* ssid = " "; // podaj tutaj swoją sieć Wi-Fi SSIDconst char* password = " "; // wpisz tutaj swoje hasło do sieci Wi-Fi
Są to identyfikator Twojego Bridge i nazwa użytkownika, którą Ci nadał. (Nie wiem, gdzie oznacza 80, ale kiedy zrobiłem trochę badań, zobaczyłem, że jest używany w sieciach).
// Stałe barwy const char hueHubIP = ""; // IP koncentratora Hue const char hueUsername = ""; // Nazwa użytkownika barwy const int hueHubPort = 80;
// Zmienne barwy bool hueOn; // wł./wył. int hueBri; // wartość jasności long hueHue; // wartość barwy String hueCmd; // Odcień, polecenie
długi bufor bez znaku=0; //bufor do przechowywania odebranych danych unsigned long addr;
Krok 15:
W przypadku konfiguracji void zrobiłem najwięcej dla połączenia internetowego. W tym kodzie Arduino szuka czy może połączyć się z siecią.
void setup(){ Serial.begin(9600);
Serial.println();
Serial.printf("Łączenie z %s", ssid);
WiFi.begin(SSid, hasło);
while (WiFi.status() != WL_CONNECTED) {
opóźnienie (500);
Serial.print("."); }
Serial.println("podłączony"); }
Krok 16:
W pętli Jamesa zobaczyłem, że miał oświadczenie If i else. Ale to dotyczyło kabla Ethernet, więc próbowałem to pominąć. Próbowałem też czasem to dostosować, ale nie wiedziałem jeszcze z dużą ilością danych. Niektóre rzeczy w kodzie, które zrozumiałem, w ciągu są dane, które są przekazywane do światła Hue.
pusta pętla () {
// Seria czterech przykładowych poleceń, których kolor powoduje przyciemnienie dwóch świateł między czerwonym a różowym. Przeczytaj dokumentację interfejsu API Hue //, aby uzyskać więcej informacji na temat dokładnych poleceń, których należy użyć, ale pamiętaj, że znaki cudzysłowu muszą być zmienione.
String command = "{"on\": true, \"hue\": 50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15), 25))+"}";setHue(1, polecenie);
command = "{"on\": true, \"hue\": 65280, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; setHue(2, polecenie);
command = "{"hue\": 65280, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; setHue(1, polecenie);
command = "{"hue\": 50100, \"sat\":255, \"bri\":255, \"transitiontime\":"+String(random(15, 25))+"}"; setHue(2, polecenie);
}
Krok 17:
Następny kod był Boolean, ale w Arduino trzeba napisać Bool. Na początku dostałem dużo błędów z powodu słowa klient. Więc sprawdziłem to i zobaczyłem, że jakiś kod używa linii "WifiClient client;". Więc przywykłem i zadziałało.
W instrukcji if często widzisz client.print. Jeśli zajrzysz do kodu, zobaczysz, że wprowadzony wcześniej adres URL jest podzielony na części. Teraz wprowadź swój własny kod. Musiałem wybrać moje trzecie światło LED.
/* setHue() to nasza główna funkcja polecenia, do której należy przekazać lekki numer i * poprawnie sformatowany ciąg polecenia w formacie JSON (w zasadzie tablica zmiennych * i wartości w stylu JavaScript. Następnie wykonuje proste żądanie HTTP PUT do Bridge pod adresem IP podanym na początku. */
bool setHue(int lightNum, polecenie String) {
Klient WiFiClient;
if (client.connect(hueHubIP, hueHubPort)){
while (klient.podłączony()){
klient.print("PUT /api/"); klient.print(hueNazwa użytkownika); klient.print("/światła/"); klient.print(lightNum); // hueLight bazuje na zero, dodaj 1 client.println("3/stan"); // tutaj zmieniłem nazwę barwy i stateclient.print("Host: "); klient.println(hueHubIP); client.print("Długość-treści: "); klient.println(polecenie.length()); client.println("Typ treści: text/plain;charset=UTF-8"); klient.println(); // pusta linia przed treścią client.println(polecenie); // Odcień, polecenie
} klient.stop(); zwróć prawdę; // polecenie wykonane }
w przeciwnym razie zwróć false; // polecenie nie powiodło się }
Krok 18:
Na drugim Boolean zrobiłem to samo, zmieniając niektóre słowa. Przesłałem go, aby sprawdzić, czy działa.
/* Funkcja pomocnicza w przypadku, gdy logika zależy od aktualnego stanu światła. * To ustawia liczbę zmiennych globalnych, które możesz sprawdzić, aby dowiedzieć się, czy światło jest włączone, czy nie * oraz odcień itp. Nie jest potrzebne tylko do wysyłania poleceń */
bool getHue(int lightNum) {
Klient WiFiClient;
if (client.connect(hueHubIP, hueHubPort)) {
klient.print("POBIERZ /api/"); klient.print(hueNazwa użytkownika); klient.print("/światła/"); klient.print(lightNum); klient.println("3/stan"); klient.print("Host: "); klient.println(hueHubIP); client.println("Typ treści: aplikacja/json"); klient.println("utrzymuj przy życiu"); klient.println();
while (client.connected()) { if (client.available()) { client.findUntil("\"on\":", "\0"); hueOn = (client.readStringUntil(', ') == "prawda"); // jeśli światło jest włączone, ustaw zmienną na true client.findUntil("\"bri\":", "\0"); hueBri = klient.odczytajStringUntil(', ').toInt(); // ustaw zmienną na wartość jasności client.findUntil("\"hue\":", "\0"); hueHue = client.readStringUntil(', ').toInt(); // ustaw zmienną na wartość barwy break; // nie przechwytuje jeszcze innych atrybutów światła } } client.stop(); zwróć prawdę; // przechwycone na, bri, hue } else return false; // błąd odczytu włączony, bri, hue }
Krok 19:
Myślę, że mógłbym nawiązać połączenie z Philips Hue. Otrzymuję informacje, ale nadal muszę je wykorzystać.
Niestety wykracza to poza to, co potrafię zakodować. Jeśli znasz odpowiedź lub jeśli istnieją prawdziwe błędy, które należy poprawić, bardzo chciałbym to usłyszeć.:-)