Linux Magazine wydanie 147

Chcemy podzielić się z Wami informacją o nowym numerze Linux Magazine:

LinuxMagazineCover_147Majowe wydanie miesięcznika „Linux Magazine” poświęcone jest  projektom z Raspberry Pi W artykułach wiodących znajdują się instrukcje wykorzystania malinki w roli :

  • serwera Minecrafta,
  • serwera chmur osobistych z platformą Cozy,
  • otwarto źródłowego centrum multimedialnego z popularnym Kodi,
  • a nawet miernika poziomu dźwięku.

Wewnątrz wydania również: Arch Linux: podstawy, szybka instalacja przy użyciu Architect Linuksa lub Arch Anywhere, fascynujące dystrybucje pochodne, a także agent pocztowy OpenSMTPD, automatyczne kopie zapasowe, zestaw narzędzi ELK Stack: Elasticsearch, Logstashi Kibana, analiza rejestrów przepływu ruchu sieciowego, wyższa wydajność dzięki zrównoleglaniu, maszyny wirtualne na pulpicie z Qubes OS, Crystal– język programowania w stylu Ruby’ego, krótkie testy narzędzi Yuck 0.2.1, Uftpd 1.9.1, Guncat 1.01.01, Kiwix 0.9, Miller 2.2.1, Debian Package Search 2.7.5, możliwości cyfrowej stacji roboczej Bitwig Studio 1.3.5 oraz inne tematy. Wszystko w wydaniu 147 Linux Magazine. Do nabycia na Allegro na papierze (wersja papierowa ma dołożoną płytę z Ubuntu 16.04 Xenial Xerus).

ESP8266 robi zdjęcia – ArduCam na ESP8266

ESP8266 z ArduCam

ESP8266 z ArduCam

ArduCam Mini jest dość niszowym produktem. Mała kamerka która możesz podłączyć do Arduino lub ESP8266. Dlaczego to jest możliwe? Otóż ArduCam to nie tylko układ optyczny i przetwornik. To również dedykowany układ CPLD, który zajmuje się obróbką obrazu. Dzięki temu nawet Arduino może przez SPI i I2C odebrać dane z kamery. Przetworzyć to już pewnie nie da rady, ale na kartę SD to może zapisać. ESP8266 ma nieco większe możliwości.

Gdy wpadł nam w ręce testowy układ ArduCam Mini 2 MP postanowiłem  przetestować kamerę – podłączając ją do ESP8266 i udostępniając obraz przez WWW. Dla jasności – ESP ma nieco większe możliwości niż Arduino, ale nadal za wolne i za mało pamięci by robić jakiś zaawansowany streaming. Dlatego tylko kilka zdjęć na sekundę (jeżeli będzie rozdzielczość mała).

Cały proces nie jest skomplikowany – jak już się dojdzie do finału. Ja, niestety wpadłem w dwie pułapki, które mnie kosztowały stracony czas, ale w końcu po to piszę, byście Wy mogli uniknąć takiego losu.

Czytaj dalej

Biblioteka Timers v.16.4.0 – Program sterowany czasem

Użyto zdjęcia na licencji CC: https://www.flickr.com/photos/michael_mayer/6969282632

Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. Badum-tsss.

Właściwie tutaj mógłbym skończyć swoje filozofowanie i wrócić do pisania kolejnej mrugającej diody. Jednak do dzwonka jeszcze daleko i nie chcę zostawić cię szanowny czytelniku z niczym.

Bo wkurza mnie, że na Arduino tak trudno napisać coś bardziej skomplikowanego. Wielu już próbowało. Wielu się nawet udało. Jednak ich kod wyglądał po tej operacji jak koń po westernie.

Jedną z większych bolączek jest funkcja „delay(czas)”. Użyjesz takiej, to ci zablokuje cały program. Więc program może robić tylko jedną rzecz. Jak chcesz zrobić inną w tym samym czasie – dokup drugie Arduino! Prawie jak tablety.

Moim remedium na te problemy jest…

Biblioteka Timers

Czytaj dalej

Co spowodowało reset Arduino?

Arduino UNO

Arduino UNO

Reset Arduino może być spowodowany przez różne źródła. Może to być sygnał reset,  zabezpieczenie przed zbyt niskim napięciem czy może działanie watchdoga. W zaawansowanych scenariuszach, gdy coś resetuje Arduino może to być ważna informacja. Na szczęście w procesorach Atmela jest rejestr przechowujący takie informacje.  Nazywa się on MCUSR.

Jak odczytać przyczynę resetu z MCUSR?

Czytaj dalej

tinyBrd – przerwania

Nettigo tinyBrd

Nettigo tinyBrd

tinyBrd to fajne narzędzie. Niecałe 5 µA w trybie uśpienia… to długie tygodnie pracy na zwykłej baterii CR2032. Nasz testowy tinyBrd w tej chwili działa już 9 tygodni, wysyłają co 30 sekund temperaturę z DS18B20. A co jeżeli nie potrzebujesz wysyłać danych regularnie?

Mając taki uniwersalny, programowalny i zdalny czujnik jak tinyBrd można mieć pomysły na reakcję gdy tylko coś się zdarzy. Mowa o nieregularnych zdarzeniach, w przeciwieństwie do cyklicznej pracy jak np wysyłania pomiaru co 30 sekund. Pomyślmy, np wysłanie informacji o jakiś nieregularnych zdarzeniach, odczytanych np z czujnika zbliżeniowego (kontaktronu).

Dotychczas wymagało to regularnego wybudzania i sprawdzania czy nastąpiło dane zdarzenie. Gorzej, jeżeli zdarzenie może trwać krótko i jest duża szansa, że nasz tinyBrd będzie spał gdy nastąpi zdarzenie.

Dziś został upubliczniony nowe NettigoTinyBrdCore, który zawiera nowy komponent – PinChangeInterrupt. By uaktualnić zainstalowane Nettigo tinyBrd Core – postępuj zgodnie z instrukcją instalacji bieżącej wersji.

Jak skorzystać z przerwań na tinyBrd?

Czytaj dalej

ESP8266, IoT – praktyczny przykład cz. 4 – Arduino IDE

ESP na płytce stykowej

ESP na płytce stykowej

ESP8266 dotąd programowaliśmy z użyciem ESPtool i w języku LUA. Tym razem  zaprogramujemy ESP bezpośrednio z Arduino IDE.

Jakie są różnice? nodeMcu był to firmware wgrany na flash ESP8266. Programy w języku LUA były wgrywane na wydzielony system plików, sam firmware pozostawał bez zmian. Różnica jest taka, że Arduino IDE będzie przygotowywać za każdym razem nowy firmware który będziemy wgrywać na ESP. Na nasze szczęście, Arduino IDE potrafi zrobić to same, więc narzędzie esptool nie będzie nam potrzebne. No, precyzyjnie mówiąc – nie musimy mieć specjalnie zainstalowanego esptool Arduino IDE za nas to zrobi.

Arduino IDE i ESP8266 w jednym stały domu

Pierwszy krok – przystosować Arduino IDE do pracy z ESP. Czytaj dalej

ESP8266 – jak sprawdzić rozmiar pamięci flash?

Jak sprawdzić ile Twój moduł ESP8266 ma pamięci Flash?

ESP8266 nie posiada zintegrowanej pamięci flash, pamięć jest podłączona na zewnętrznym układzie. Dlatego różne moduły mogą mieć różne ilości dostępnej pamięci. I teraz jedyną bezinwazujną metodą jest jednak skorzystanie z programu esptool o którym mowa była w pierwszej części przewodnika IoT dla ESP8266.

Dotyczy to oczywiście modułów jak ESP8266-07 czy -12, które mają sam ESP i układ flash osłonięte ochronną blaszką. ESP8266-01 ma na wierzchu układy, więc można oznaczenie scalaka po prostu odczytać.

Zakładamy, że układ jest tak samo podłączony jak w tamtej części przewodnika i masz już esptool w systemie. Ma on opcję do odczytu ID producenta. Przechodzimy do katalogu z esptool i:

 ./esptool.py --port /dev/ttyACM0 --baud 115200 flash_id

Port, to jest port szeregowy utworzony przez podłączone UNO, taką formę ma na Linuksie, na Windows to będzie któryś COMx. Przed wydaniem komendy trzeba ustawić ESP w tryb wgrywania firmware. Czyli, jeżeli korzystasz z adaptera, GPIO0 trzeba zewrzeć do masy i zrestartować moduł. Wynik działania:

Connecting...
Manufacturer: e0
Device: 4014

Liczby te to są kody (zapisane szesnastkowo) oznaczające kod producenta oraz nadany przez niego ID układu. I tutaj kończy się prosta część. Bo ustalić co to dokładnie za układ nie jest łatwo… ID producenta jest nadawane przez konsorcjum JEDEC- wielka organizacja zrzeszająca producentów elektroniki – grupy zadaniowe, komitety, normy, blah… straszna biurokracja. No i jak to często w design by committee bywa :) ID producenta jest tylko 8-mio bitowe.  W tej chwili lista producentów jest pogrupowana w 9 banków, czyli jedno ID ma 9 różnych firm… Nice. W przyszłości będzie ich pewnie jeszcze więcej.

Pozostaje googlać, ale… powyższy wynik to rezultat z nowego ESP8266-07 w sprzedaży u nas. Google znajduje na forum ESP8266 informację, że to układ Winbonda, ale… nie jest to prawda. Winbond ma ID 0xEF a nie 0xE0. Id 0xE0 wg JEDEC przypisane jest do: LG Semi (Goldstar), Truevision, Domosys, Sandburst, Credence Systems Corp., Opulan Technologies, Memory Exchange Corp., Berg Microelectronics Inc, Eoplex Inc. Fajnie…

No to zamiast główkować co tam w środku może być, użyliśmy większego młotka :) a dokładniej – opalarki.

ESP8266-07 ze zdjętym ekranem

ESP8266-07 ze zdjętym ekranem

Na zdjęciu nie widać, bo napisy ledwo widoczne – Berg Microelectronics. BergMicro to firma z HongKongu. Nie udało się znaleźć nawet ich strony WWW, a co dopiero jakiegoś datasheeta… Jakaś strona twierdzi, że zna znaczenie kodu produktu BM, ale.. nasz chip ma oznaczenie 25Q80ASSIG. Nie ma takiego miasta Londyn, jest Lądek Zdrój… Na ile można temu wierzyć (dekodując część 25Q80A), to powinien być układ flash o pojemności 8×1024 k bitów, czyli 1MB. I tego się trzymamy :)

Druga z liczb podanych przez esptool to jest ID układu nadawane przez producenta. By je móc rozszyfrować to potrzebny jest datasheet układu. Ten ID może tylko służyć nam do poszukiwania info przez Google, ale jak pokazuje powyższy przykład z ID producenta, to należy taką informację traktować jako mało wiarygodną.

Czyli – 100% metody nie ma. Zawsze może się przydać praca wykonana przez autorów projektu flashrom gdzie jeden z plików flashchips.h zawiera całkiem spory zestaw kodów producentów i co równie ważne – ID chipów z ich nazwami. Może to Wam pomoże zorientować się jaki flash jest w środku, bo mając datasheet można zwykle więcej powiedzieć.

Arduino IDE i ESP8266

Arduino IDE w wersji dla ESP8266 posiada pewne funkcje, które wydawać się mogą przydatne w celu ustalenia rozmiaru pamięci flash. Jednak wiedzcie, że ESP.getFlashChipSize() zwraca wartość zapisaną w firmware a nie prawdziwą. Czyli jeśli wybierzecie target Generic ESP8266 Board i wybierzecie rozmiar pamięci flash 512K – taką wartość zwróci ESP.getFlashChipSize(). Jeśli 4M – zwróci 4M… Nie za bardzo się nam przyda…

To co istotne – w większości projektów, nawet 512k flashu to jest całkiem sporo :)

EDIT/UZUPEŁNIENIE

Jak ktoś słusznie zauważył – można wgrać na ESP nodeMCU i skorzystać z polecenia node.info(). Poda ono również ile jest dostępnej pamięci flash. Jak ono to robi? Próbuje odczytać zawartość pamięci flash z coraz ‚odleglejszych‚ regionów. Gdy to się nie udaje w którymś momencie, to nodeMCU uznaje że tyle pamięci jest dostępne. Można sprawdzić samemu w kodzie funkcji flash_detect_size_byte

Od razu GPS logger zbudowano, czyli Arduino i GPS

W poprzedniej części napisaliśmy jak podłączyć kartę microSD do Arduino i coś na niej zapisywać. Jak każdy mógł zauważyć w plątaninie kabli krył się też odbiornik GPS. Ten post miał powstać wcześniej, ale wyglądało na to, że mamy jakiś problem z dostawą z Chin, o czym kilka słów na firmowym blogu. Na szczęście wszystko się wyjaśniło, więc moduły GPS są dostępne i jeżeli planujesz podłączyć z Arduino zrobić odbiornik GPS to wiesz gdzie szukać :)

Moduł GPS VK2828U7G5FL podłączony do Arduino

Teraz o tym jak podłączymy moduł VK2828U7G5LF do  Arduino. Posłuży nam ten schemat:

Jak podłączyć GPS do Arduino

Podłączenie GPS VK2828U7G5LF do Arduino

Czytaj dalej

ESP8266, IoT – praktyczny przykład cz. 3

ESP8266 na płytce

ESP8266 na płytce – wersja prawie finalna

Mamy gotowy układ na płytkach stykowych. Działa, ale trudno coś takiego włożyć do obudowy i stosować do sterowania urządzeniami (np pompą CWU). Pokażę Wam, jak w prosty sposób można zmienić nasz układ w formę znacznie trwalszą, z lutowanymi połączeniami.

Idealnie byłoby zaprojektować i wykonać płytkę drukowaną. Taką płytę można oczywiście zrobić domowymi metodami. Nie jest to takie trudne, jak się może wydawać. O tym jak to zrobić, to innym razem. Są gotowe półprodukty, które ułatwiają zrobienie trwałego układu. Pewnie większość z Was widziała tak zwanego perfboarda – płytkę uniwersalną. Posiadają one otwory w rastrze 2.54 mm. Otwory z jednej strony są pokryte miedzią. Można przewlec tam elementy i przylutować. Zamiast ścieżek używać przewodów. Daje radę, ale nie jest to zbyt wygodne. Szczególnie łączenie wszystkich połączeń przewodami. Czego można użyć zamiast perfboarda?

Czytaj dalej

ESP8266, IoT – praktyczny przykład cz. 2

Poprzednio pokazałem jak podłączyć się do modułu ESP8266, wgrać firmware NodeMCU oraz podpiąć się do sieci WiFi. Teraz, czas na interakcje z modułem przez sieć, bo to jest jeden z aspektów IoT – możliwość wpłynięcia na zachowanie urządzeń przez sieć.

W poprzedniej części napisałem, że koniecznie trzeba nazwać nagrywany plik init.lua. Plik o takiej nazwie jest automatycznie (po restarcie) wykonywany przez ESP8266 z firmware nodeMCU. Jeśli chcesz możesz oczywiście podzielić swój kod na różne pliki, wystarczy w init.lua wydać komendę dofile("NAZWA") by wykonać kod zawarty w pliku NAZWA.
Środowisko ESPlorer niestety nie zna pojęcia projekt, więc potem każdy plik, który chcesz używać trzeba otworzyć ręcznie (przez Ctrl+O) – nie jest to wygodne, ale cóż zrobić.

UWAGA w tym wpisie zajmujemy się podłączaniem urządzeń wykorzystujących zasilanie z sieci 230V. Jeżeli jesteś zupełnym laikiem, nie masz doświadczenia w pracy z takimi napięciami – koniecznie znajdź kogoś doświadczonego, kto może Ci pomóc. Nasz artykuł jest przeznaczony dla osób, które wiedzą jak się obchodzić z takimi napięciami. Nie masz doświadczenia – nie rób tego sam.

Zgodnie z zapowiedzią, naszym celem jest zbudowanie serwera WWW na ESP8266, który przez stronę WWW pozwoli na zdalne kontrolowanie urządzenia elektrycznego.

Czytaj dalej