Facebook - konwersja

Arduino. Przepisy na rozpoczęcie, rozszerzanie i udoskonalanie projektów. Wydanie III - ebook

Wydawnictwo:
Tłumacz:
Data wydania:
2 marca 2021
Format ebooka:
EPUB
Format EPUB
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najpopularniejszych formatów e-booków na świecie. Niezwykle wygodny i przyjazny czytelnikom - w przeciwieństwie do formatu PDF umożliwia skalowanie czcionki, dzięki czemu możliwe jest dopasowanie jej wielkości do kroju i rozmiarów ekranu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, PDF
Format PDF
czytaj
na laptopie
czytaj
na tablecie
Format e-booków, który możesz odczytywać na tablecie oraz laptopie. Pliki PDF są odczytywane również przez czytniki i smartfony, jednakze względu na komfort czytania i brak możliwości skalowania czcionki, czytanie plików PDF na tych urządzeniach może być męczące dla oczu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, MOBI
Format MOBI
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najczęściej wybieranych formatów wśród czytelników e-booków. Możesz go odczytać na czytniku Kindle oraz na smartfonach i tabletach po zainstalowaniu specjalnej aplikacji. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
(3w1)
Multiformat
E-booki sprzedawane w księgarni Virtualo.pl dostępne są w opcji multiformatu - kupujesz treść, nie format. Po dodaniu e-booka do koszyka i dokonaniu płatności, e-book pojawi się na Twoim koncie w Mojej Bibliotece we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu przy okładce. Uwaga: audiobooki nie są objęte opcją multiformatu.
czytaj
na laptopie
Pliki PDF zabezpieczone watermarkiem możesz odczytać na dowolnym laptopie po zainstalowaniu czytnika dokumentów PDF. Najpowszechniejszym programem, który umożliwi odczytanie pliku PDF na laptopie, jest Adobe Reader. W zależności od potrzeb, możesz zainstalować również inny program - e-booki PDF pod względem sposobu odczytywania nie różnią niczym od powszechnie stosowanych dokumentów PDF, które odczytujemy każdego dnia.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na czytniku
Czytanie na e-czytniku z ekranem e-ink jest bardzo wygodne i nie męczy wzroku. Pliki przystosowane do odczytywania na czytnikach to przede wszystkim EPUB (ten format możesz odczytać m.in. na czytnikach PocketBook) i MOBI (ten fromat możesz odczytać m.in. na czytnikach Kindle).
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na smartfonie
Aby odczytywać e-booki na swoim smartfonie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. iBooks dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
129,00

Arduino. Przepisy na rozpoczęcie, rozszerzanie i udoskonalanie projektów. Wydanie III - ebook

Popularność Arduino szybko rośnie. Dla niektórych jest to uzależniające hobby, dla innych - praktyczny, tani komputer, który może komunikować się ze światem zewnętrznym i obsługiwać przeróżne urządzenia elektroniczne. Arduino jest przy tym stosunkowo prosty w obsłudze nawet dla osób bez doświadczenia w programowaniu i elektronice. Wystarczy dobry pomysł i dzięki Arduino można łatwo tworzyć projekty związane z internetem rzeczy, czujniki monitorujące otoczenie, a także urządzenia reagujące na dotyk, dźwięk, temperaturę czy światło.

Książka stanowi zbiór ponad dwustu receptur ułatwiających wykorzystanie potencjału Arduino 1.8. Jest dostosowana do potrzeb osób, które chcą po prostu szybko znaleźć rozwiązanie problemu ze sprzętem czy z kodem. Zawiera informacje potrzebne do pomyślnej realizacji szerokiej gamy projektów oraz dostosowania ich do szczególnych potrzeb. Nie ma tu przydługawych rozważań teoretycznych, za to są wskazówki pozwalające na błyskawiczne napisanie działającego kodu. Praktyczne receptury umożliwiające wykonanie wielu popularnych zadań przydadzą się zarówno adeptom Arduino, jak i doświadczonym programistom, którzy chcą skutecznie korzystać z niskopoziomowych zasobów kontrolera AVR.

W książce znajdziesz receptury dotyczące:

  • koncepcji pracy z programowaniem płytki Arduino
  • odczytywania sygnałów cyfrowych i analogowych
  • wykorzystywania różnorodnych czujników i urządzeń wejścia
  • stosowania wyświetlaczy, generowania dźwięków i sterowania pracą silników
  • komunikowania się ze zdalnie sterowanymi urządzeniami domowymi
  • zaawansowanych technik programowania i zarządzania pamięcią

Jaki zadziwiający projekt zrobisz dziś z Arduino?

Spis treści


Wstęp 11

1. Wprowadzenie do Arduino 21

  • 1.0. Wprowadzenie 21
  • 1.1. Instalacja zintegrowanego środowiska programistycznego (IDE) 26
  • 1.2. Rozpoczęcie pracy z płytką Arduino 30
  • 1.3. Przygotowanie szkicu Arduino za pomocą zintegrowanego środowiska programistycznego 32
  • 1.4. Wgrywanie i uruchamianie szkicu Blink 35
  • 1.5. Tworzenie i zapisywanie szkicu 37
  • 1.6. Pierwszy prosty projekt Arduino 39
  • 1.7. Użycie płytek spoza standardowej dystrybucji z Arduino 44
  • 1.8. Korzystanie z 32-bitowego Arduino lub płytki kompatybilnej z Arduino 47

2. Programowanie w Arduino 51

  • 2.0. Wprowadzenie 51
  • 2.1. Typowy szkic Arduino 52
  • 2.2. Stosowanie prostych typów zmiennych 53
  • 2.3. Stosowanie liczb zmiennoprzecinkowych 56
  • 2.4. Praca z zestawem wartości 59
  • 2.5. Korzystanie z możliwości łańcucha znaków w Arduino 62
  • 2.6. Korzystanie z tablic znaków języka C 67
  • 2.7. Dzielenie tekstu rozdzielonego przecinkami na grupy 69
  • 2.8. Zamiana liczby na łańcuch znaków 71
  • 2.9. Zamiana łańcucha znaków na liczbę 74
  • 2.10. Podział kodu na funkcjonalne bloki 76
  • 2.11. Zwracanie więcej niż jednej wartości z funkcji 80
  • 2.12. Wykonywanie instrukcji w zależności od warunku 83
  • 2.13. Powtarzanie sekwencji poleceń, gdy warunek jest spełniony 84
  • 2.14. Powtarzanie poleceń za pomocą licznika 86
  • 2.15. Przerywanie pętli for 89
  • 2.16. Wykonywanie wielu różnych operacji w oparciu o jedną zmienną 90
  • 2.17. Porównywanie znaków i wartości liczbowych 92
  • 2.18. Porównywanie łańcuchów znaków 95
  • 2.19. Przeprowadzanie porównań logicznych 96
  • 2.20. Stosowanie operatorów bitowych 97
  • 2.21. Skrócone operatory przypisania 100

3. Działania matematyczne 101

  • 3.0. Wprowadzenie 101
  • 3.1. Dodawanie, odejmowanie, mnożenie i dzielenie 101
  • 3.2. Inkrementacja i dekrementacja wartości 103
  • 3.3. Reszta z dzielenia dwóch wartości 104
  • 3.4. Wartość bezwzględna 105
  • 3.5. Ograniczanie wartości liczby do danego zakresu 106
  • 3.6. Wartość minimalna i wartość maksymalna 107
  • 3.7. Podnoszenie liczby do potęgi 108
  • 3.8. Obliczanie pierwiastka kwadratowego 109
  • 3.9. Zaokrąglanie liczb zmiennoprzecinkowych w dół i w górę 109
  • 3.10. Funkcje trygonometryczne 110
  • 3.11. Liczby losowe 111
  • 3.12. Ustawianie i odczytywanie bitów 114
  • 3.13. Przesuwanie bitów 117
  • 3.14. Wyciąganie najmniej i najbardziej znaczących bajtów ze zmiennej typu int lub long 118
  • 3.15. Tworzenie zmiennej int lub long z połączenia górnych i dolnych bajtów 120

4. Komunikacja szeregowa 123

  • 4.0. Wprowadzenie 123
  • 4.1. Wysyłanie informacji z Arduino do komputera 130
  • 4.2. Wysyłanie sformatowanego tekstu i danych liczbowych z Arduino 134
  • 4.3. Odbieranie danych szeregowych przez Arduino 138
  • 4.4. Wysyłanie z Arduino wielu informacji w jednej wiadomości 143
  • 4.5. Odbieranie na Arduino wielu informacji w jednej wiadomości 149
  • 4.6. Wysyłanie danych binarnych z Arduino 152
  • 4.7. Odbieranie na komputerze danych binarnych wysłanych z Arduino 157
  • 4.8. Wysyłanie wartości binarnych z Processingu do Arduino 159
  • 4.9. Wysyłanie wartości wielu pinów Arduino 162
  • 4.10. Zapisywanie danych z Arduino w pliku rejestru zdarzeń na komputerze 166
  • 4.11. Wysyłanie danych do kilku urządzeń szeregowych 169
  • 4.12. Odbieranie danych z kilku urządzeń szeregowych 173
  • 4.13. Użycie Arduino z Raspberry Pi 178

5. Proste wejścia cyfrowe i analogowe 183

  • 5.0. Wprowadzenie 183
  • 5.1. Wykorzystanie przycisku 187
  • 5.2. Korzystanie z przycisku bez zewnętrznych rezystorów 191
  • 5.3. Rozwiązanie problemu drgających styków 192
  • 5.4. Sprawdzanie, jak długo przycisk był wciśnięty 196
  • 5.5. Odczytywanie wartości z klawiatury numerycznej 200
  • 5.6. Odczytywanie wartości analogowych 203
  • 5.7. Zmiana zakresu wartości 205
  • 5.8. Odczytywanie więcej niż sześciu wejść analogowych 208
  • 5.9. Pomiar napięcia do 5 V 211
  • 5.10. Reagowanie na zmiany napięcia 214
  • 5.11. Pomiar napięcia wyższego niż 5 V (dzielniki napięcia) 215

6. Odczytywanie informacji wejściowych z czujników 219

  • 6.0. Wprowadzenie 219
  • 6.1. Arduino z wieloma wbudowanymi czujnikami 221
  • 6.2. Wykrywanie ruchu 225
  • 6.3. Wykrywanie światła 227
  • 6.4. Wykrywanie ruchów istot żywych 230
  • 6.5. Pomiar odległości 232
  • 6.6. Dokładny pomiar odległości 237
  • 6.7. Wykrywanie drgań 239
  • 6.8. Wykrywanie dźwięku 241
  • 6.9. Pomiar temperatury 245
  • 6.10. Odczytywanie etykiet RFID (NFC) 249
  • 6.11. Monitorowanie ruchu obrotowego 252
  • 6.12. Monitorowanie ruchu obrotowego w szkicu z przerwaniami, który wykonuje wiele zadań 255
  • 6.13. Korzystanie z myszki 257
  • 6.14. Pobieranie pozycji z modułu GPS 261
  • 6.15. Wykrywanie obrotu za pomocą żyroskopu 266
  • 6.16. Wykrywanie kierunku 268
  • 6.17. Odczytywanie przyspieszenia 271

7. Optyczne urządzenia wyjścia 275

  • 7.0. Wprowadzenie 275
  • 7.1. Podłączanie i wykorzystywanie diod LED 279
  • 7.2. Dostosowywanie jasności diody LED 282
  • 7.3. Korzystanie z diod LED wysokiej mocy 284
  • 7.4. Dostosowywanie koloru diody LED 286
  • 7.5. Sterowanie wieloma kolorowymi diodami LED 289
  • 7.6. Sterowanie wieloma diodami LED - tworzenie wykresu słupkowego 292
  • 7.7. Sterowanie wieloma diodami LED - efekt pływającego światła 296
  • 7.8. Sterowanie matrycą diod LED za pomocą multipleksowania 298
  • 7.9. Wyświetlanie obrazków na matrycy LED 302
  • 7.10. Sterowanie matrycą LED - charlieplexing 304
  • 7.11. Sterowanie 7-segmentowym wyświetlaczem LED 310
  • 7.12. Sterowanie kilkucyfrowymi wyświetlaczami 7-segmentowymi: multipleksowanie 313
  • 7.13. Sterowanie kilkucyfrowymi wyświetlaczami 7-segmentowymi za pomocą mniejszej liczby pinów 315
  • 7.14. Sterowanie matrycą diod LED za pomocą rejestrów przesuwnych MAX72xx 317
  • 7.15. Zwiększenie liczby analogowych wyjść za pomocą generatorów PWM 320
  • 7.16. Wykorzystanie miernika analogowego jako wyświetlacza 323

8. Fizyczne urządzenia wyjścia 325

  • 8.0. Wprowadzenie 325
  • 8.1. Sterowanie obrotem za pomocą serwomechanizmu 328
  • 8.2. Sterowanie obrotem serwomechanizmu za pomocą potencjometru lub czujnika 330
  • 8.3. Sterowanie prędkością serwomechanizmów przystosowanych do pracy ciągłej 332
  • 8.4. Sterowanie serwomechanizmami za pomocą poleceń wysyłanych z komputera 334
  • 8.5. Sterowanie silnikiem bezszczotkowym (za pomocą hobbystycznego regulatora prędkości) 336
  • 8.6. Sterowanie solenoidami i przekaźnikami 337
  • 8.7. Wywoływanie wibracji obiektu 339
  • 8.8. Sterowanie silnikiem szczotkowym za pomocą tranzystora 341
  • 8.9. Sterowanie kierunkiem obrotu silnika szczotkowego za pomocą mostku H 343
  • 8.10. Sterowanie kierunkiem obrotu i prędkością silnika szczotkowego za pomocą mostku H 346
  • 8.11. Stosowanie czujników do sterowania kierunkiem obrotu i prędkością silników szczotkowych 348
  • 8.12. Sterowanie bipolarnym silnikiem krokowym 354
  • 8.13. Sterowanie bipolarnym silnikiem krokowym (za pomocą płytki EasyDriver) 358
  • 8.14. Sterowanie unipolarnym silnikiem krokowym za pomocą sterownika ULN2003A 361

9. Dźwiękowe urządzenia wyjścia 365

  • 9.0. Wprowadzenie 365
  • 9.1. Granie dźwięków 368
  • 9.2. Odtwarzanie prostej melodii 371
  • 9.3. Generowanie więcej niż jednego dźwięku jednocześnie 372
  • 9.4. Generowanie dźwięków niekolidujące z PWM 374
  • 9.5. Sterowanie MIDI 377
  • 9.6. Utworzenie syntezatora audio 380
  • 9.7. Osiągnięcie wysokiej jakości syntezy audio 381

10. Zdalne sterowanie 385

  • 10.0. Wprowadzenie 385
  • 10.1. Odbieranie sygnałów z pilota na podczerwień 386
  • 10.2. Odkodowywanie sygnałów podczerwieni 389
  • 10.3. Naśladowanie sygnałów pilota 392
  • 10.4. Sterowanie aparatem cyfrowym 395
  • 10.5. Sterowanie urządzeniami na prąd zmienny przez zhakowanie zdalnie sterowanego przełącznika 398

11. Wyświetlacze 403

  • 11.0. Wprowadzenie 403
  • 11.1. Tekstowe wyświetlacze LCD 403
  • 11.2. Formatowanie tekstu 407
  • 11.3. Włączanie i wyłączanie kursora i wyświetlacza 410
  • 11.4. Przewijanie tekstu 411
  • 11.5. Wyświetlanie znaków specjalnych 414
  • 11.6. Tworzenie własnych znaków 417
  • 11.7. Wyświetlanie symboli złożonych z kilku znaków 419
  • 11.8. Wyświetlanie pikseli mniejszych niż pojedynczy znak 421
  • 11.9. Wybór graficznego wyświetlacza LCD 424
  • 11.10. Sterowanie kolorowym wyświetlaczem LCD 426
  • 11.11. Sterowanie monochromatycznym wyświetlaczem OLED 429

12. Godziny i daty 435

  • 12.0. Wprowadzenie 435
  • 12.1. Stosowanie funkcji millis do pomiaru czasu 435
  • 12.2. Tworzenie przerw w szkicu 436
  • 12.3. Precyzyjne mierzenie długości impulsu 440
  • 12.4. Wykorzystanie Arduino jako zegarka 442
  • 12.5. Regularne wywoływanie funkcji 449
  • 12.6. Korzystanie z zegara czasu rzeczywistego 453

13. Komunikacja za pomocą I2C i SPI 457

  • 13.0. Wprowadzenie 457
  • 13.1. Podłączanie kilku urządzeń I2C 463
  • 13.2. Podłączanie kilku urządzeń SPI 466
  • 13.3. Praca z układem scalonym I2C 469
  • 13.4. Zwiększenie liczby wejść i wyjść za pomocą ekspandera wyprowadzeń I2C 473
  • 13.5. Komunikacja między kilkoma płytkami Arduino 476
  • 13.6. Korzystanie z akcelerometru wbudowanego w kontrolerze Wii 480

14. Prosta komunikacja bezprzewodowa 487

  • 14.0. Wprowadzenie 487
  • 14.1. Wysyłanie wiadomości za pomocą tanich modułów bezprzewodowych 487
  • 14.2. Podłączenie Arduino przez ZigBee lub sieć 802.15.4 494
  • 14.3. Wysyłanie wiadomości do konkretnego XBee 501
  • 14.4. Przesyłanie danych z czujników między modułami XBee 504
  • 14.5. Włączanie elementu wykonawczego za pomocą XBee 509
  • 14.6. Łączenie się z urządzeniami wyposażonymi w Bluetooth Classic 514
  • 14.7. Łączenie się z urządzeniami za pomocą Bluetootha Low Energy 517

15. Wi-Fi i Ethernet 521

  • 15.0. Wprowadzenie 521
  • 15.1. Łączenie się z siecią Ethernet 523
  • 15.2. Automatyczne uzyskiwanie swojego adresu IP 527
  • 15.3. Wysyłanie i odbieranie prostych wiadomości 528
  • 15.4. Użycie Arduino z wbudowanym Wi-Fi 536
  • 15.5. Łączenie się z Wi-Fi za pomocą niedrogich modułów 539
  • 15.6. Wyciąganie danych z odpowiedzi z serwera 544
  • 15.7. Żądanie danych z serwera sieciowego w formacie XML 549
  • 15.8. Arduino jako serwer sieciowy 551
  • 15.9. Obsługa przychodzących żądań sieciowych 556
  • 15.10. Obsługa przychodzących żądań dla określonych stron 560
  • 15.11. Formatowanie odpowiedzi z serwera za pomocą HTML 565
  • 15.12. Pobieranie danych z serwera za pomocą formularzy (POST) 569
  • 15.13. Obsługa stron internetowych z dużą ilością danych 572
  • 15.14. Publikowanie wiadomości na Twitterze 579
  • 15.15. Wymiana danych w internecie rzeczy 582
  • 15.16. Wysyłanie danych do brokera MQTT 583
  • 15.17. Subskrypcja danych z brokera MQTT 585
  • 15.18. Pobieranie godziny i daty z internetowego serwera czasu 587

16. Stosowanie, modyfikowanie i tworzenie bibliotek 593

  • 16.0. Wprowadzenie 593
  • 16.1. Korzystanie z bibliotek wbudowanych w Arduino IDE 593
  • 16.2. Instalacja bibliotek zewnętrznych 597
  • 16.3. Modyfikacja biblioteki 598
  • 16.4. Tworzenie własnych bibliotek 602
  • 16.5. Tworzenie bibliotek wykorzystujących inne biblioteki 607
  • 16.6. Aktualizacja bibliotek niestandardowych dla Arduino 1.0 612

17. Zaawansowane techniki programowania i obsługa pamięci 615

  • 17.0. Wprowadzenie 615
  • 17.1. Zrozumienie procesu kompilacji i wgrywania kodu źródłowego na płytkę 616
  • 17.2. Określanie ilości zajętej i wolnej pamięci RAM 619
  • 17.3. Przechowywanie danych liczbowych w pamięci flash i ich pobieranie 622
  • 17.4. Przechowywanie łańcuchów znaków w pamięci flash i ich pobieranie 625
  • 17.5. Stosowanie #define i const zamiast liczb całkowitych 627
  • 17.6. Stosowanie kompilacji warunkowych 628

18. Bezpośrednie korzystanie ze sprzętu kontrolera 631

  • 18.0. Wprowadzenie 631
  • 18.1. Przechowywanie danych w nieulotnej pamięci EEPROM 636
  • 18.2. Automatyczne wykonywanie operacji po zmianie stanu pinu 639
  • 18.3. Wykonywanie operacji cyklicznych 642
  • 18.4. Ustawianie impulsu szerokości i długości licznika 644
  • 18.5. Tworzenie generatora impulsów 646
  • 18.6. Zmiana częstotliwości PWM licznika 649
  • 18.7. Zliczanie impulsów 651
  • 18.8. Dokładny pomiar impulsów 653
  • 18.9. Szybki pomiar wartości analogowych 656
  • 18.10. Zmniejszenie zużycia baterii 658
  • 18.11. Bardzo szybkie ustawienie pinów cyfrowych 660
  • 18.12. Wgrywanie szkiców za pomocą programatora 663
  • 18.13. Zastępowanie programu rozruchowego Arduino 664
  • 18.14. Poruszanie kursorem myszki na komputerze (PC lub Mac) 665

A. Komponenty elektroniczne 669

B. Czytanie schematów i dokumentacji 675

C. Budowa obwodu 681

D. Wskazówki dotyczące rozwiązywania problemów z programem 685

E. Wskazówki dotyczące rozwiązywania problemów ze sprzętem 689

F. Piny cyfrowe i analogowe 691

G. Tabela ASCII i rozszerzony zestaw znaków 695

Kategoria: Hardware
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-283-7162-0
Rozmiar pliku: 17 MB

BESTSELLERY

Kategorie: