<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.kamamilabs.com/index.php?action=history&amp;feed=atom&amp;title=KAmod_ESP32_C3_%28PL%29</id>
	<title>KAmod ESP32 C3 (PL) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kamamilabs.com/index.php?action=history&amp;feed=atom&amp;title=KAmod_ESP32_C3_%28PL%29"/>
	<link rel="alternate" type="text/html" href="https://wiki.kamamilabs.com/index.php?title=KAmod_ESP32_C3_(PL)&amp;action=history"/>
	<updated>2026-05-10T13:55:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.kamamilabs.com/index.php?title=KAmod_ESP32_C3_(PL)&amp;diff=7367&amp;oldid=prev</id>
		<title>Grzegorzbecker: Created page with &quot;__jzpdf__ ==== Opis ==== &#039;&#039;&#039;KAmod ESP32-C3 - Płytka rozwojowa z układem ESP32-C3 Mini-1&#039;&#039;&#039;&lt;/br&gt; Na płytce KAmod ESP32-C3 znajduje się moduł ESP32-C3 Mini-1 firmy Espressif, który zawiera 32-bitowy, jednordzeniowy mikrokontroler SoC o architekturze RISC-V oraz interfejsy radiowe Wi-Fi i Bluetooth 5 (LE) z obsługą trybu dalekiego zasięgu (LR).  &lt;br&gt;&lt;br&gt; Częstotliwość taktowania MCU wynosi maksymalnie 160 MHz i jest wyposażony w aż 400 kB pamięci RAM i 4 MB p...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.kamamilabs.com/index.php?title=KAmod_ESP32_C3_(PL)&amp;diff=7367&amp;oldid=prev"/>
		<updated>2026-03-25T07:01:54Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;__jzpdf__ ==== Opis ==== &amp;#039;&amp;#039;&amp;#039;KAmod ESP32-C3 - Płytka rozwojowa z układem ESP32-C3 Mini-1&amp;#039;&amp;#039;&amp;#039;&amp;lt;/br&amp;gt; Na płytce KAmod ESP32-C3 znajduje się moduł ESP32-C3 Mini-1 firmy Espressif, który zawiera 32-bitowy, jednordzeniowy mikrokontroler SoC o architekturze RISC-V oraz interfejsy radiowe Wi-Fi i Bluetooth 5 (LE) z obsługą trybu dalekiego zasięgu (LR).  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; Częstotliwość taktowania MCU wynosi maksymalnie 160 MHz i jest wyposażony w aż 400 kB pamięci RAM i 4 MB p...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__jzpdf__&lt;br /&gt;
==== Opis ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;KAmod ESP32-C3 - Płytka rozwojowa z układem ESP32-C3 Mini-1&amp;#039;&amp;#039;&amp;#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
Na płytce KAmod ESP32-C3 znajduje się moduł ESP32-C3 Mini-1 firmy Espressif, który zawiera 32-bitowy, jednordzeniowy mikrokontroler SoC o architekturze RISC-V oraz interfejsy radiowe Wi-Fi i Bluetooth 5 (LE) z obsługą trybu dalekiego zasięgu (LR).  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Częstotliwość taktowania MCU wynosi maksymalnie 160 MHz i jest wyposażony w aż 400 kB pamięci RAM i 4 MB pamięci Flash. Obsługuje tryby niskiego zużycia energii, działa w temperaturach od -40 do +85︒C, realizuje funkcje bezpiecznego rozruchu Secure Boot oraz szyfrowanie flash z AES-128/256-XTS, itd. Dzięki tak rozbudowanej specyfikacji doskonale nadaje się do zastosowań przemysłowych oraz z zakresu IoT. Ponadto, na płytce modułu znajdują się: dokładny czujnik temperatury i wilgotności SHTC3, czujnik MEMS typu ICM42670 zawierający 3-osiowy żyroskop i 3-osiowy akcelerometr, 3-kolorowa dioda typu WS28212, oraz dioda LED podłączona do jednego z portów mikrokontrolera. Komponenty te ułatwią budowę wielu różnych aplikacji. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Moduł jest zasilany napięciem +5V dostarczanym przez złącze USB-C, lub napięciem z akumulatora Li-Ion. Napięcie +3,3 V zasilające mikrokontroler i układy peryferyjne wytwarza przetwornica Buck DC/DC typu SY8088 o napięciu wejściowym z zakresu 2.5….5 V. Po zaniku napięcia ze złącza USB-C zasilanie automatycznie dostarczane jest z akumulatora (jeżeli jest podłączony). Układ zasilania jest uzupełniony o ładowarkę akumulatora Li-Ion na bazie układu MCP7381, zasilanej ze złącza USB-C.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Moduł KAmod ESP32-C3 jest przeznaczony do uruchamiania i testowania aplikacji w środowisku Arduino z użyciem języka C/C++ oraz Rust. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32_C3_2.jpg|450px]]&lt;br /&gt;
[[File:KAmodESP32-C3_3.jpg|400px]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Podstawowe cechy i parametry ====&lt;br /&gt;
&lt;br /&gt;
* Moduł ESP32C3 Mini-1 (Wi-Fi 802.11 b/g/n, Bluetooth 5 LE)&lt;br /&gt;
* Mikrokontroler 32-bit RISC-V jednordzeniowy 160 MHz, 400 kB SRAM, 4 MB Flash&lt;br /&gt;
* 15 linii GPIO&lt;br /&gt;
* interfejsy komunikacyjne SPI, I2C, I2S, UART, USB&lt;br /&gt;
* przetwornik ADC 12-bit SAR do 6 kanałów&lt;br /&gt;
* Akcelerometr ICM42670&lt;br /&gt;
** Trójosiowy żyroskop MEMS - czujniki prędkości kątowej osi X, Y i Z&lt;br /&gt;
** Trójosiowy akcelerometr MEMS osi X, Y i Z&lt;br /&gt;
** Interfejs komunikacyjny: I2C&lt;br /&gt;
* Termometr/higrometr SHTC3&lt;br /&gt;
** Zakres pomiaru wilgotności 0…100%RH z dokładnością +/- 2%&lt;br /&gt;
** Zakres pomiaru temperatury -40 do +125 °C. Dokładność pomiaru +/-0.2°C w zakresie od 0°C do +60°C&lt;br /&gt;
** Interfejs komunikacyjny I2C&lt;br /&gt;
* Przetwornica DC/DC typu SY8088&lt;br /&gt;
* Układ ładowarki baterii Li-Ion typu MCP73831&lt;br /&gt;
* Programowana dioda WS2812&lt;br /&gt;
* Złącze USB-C&lt;br /&gt;
** Zasilanie modułu napięciem +5V&lt;br /&gt;
** Interfejs programujący pamięć Flash mikrokontrolera&lt;br /&gt;
** Interfejs JTAG&lt;br /&gt;
* Przyciski Reset i Boot&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wyposażenie standardowe ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 1000px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot;|Kod&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot;|Opis&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;b&amp;gt;KAmod ESP32-C3&amp;lt;/b&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot;| &lt;br /&gt;
*Zmontowany i uruchomiony moduł&amp;lt;br&amp;gt;&lt;br /&gt;
*1 x prosta listwa goldpin 12-pin raster 2,54 mm&lt;br /&gt;
*1 x prosta listwa goldpin 16-pin raster 2,54 mm&lt;br /&gt;
|}&lt;br /&gt;
[[File:KAmodESP32-C3_4.jpg|none|700px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schemat elektryczny ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_sch.png|none|1000px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Opis wyprowadzeń  ====&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_io.png|none|800px|thumb|center]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zasilanie układu ====&lt;br /&gt;
&lt;br /&gt;
Moduł jest zasilany napięciem VBUS o wartości +5 V ze złącza USB-C. To napięcie służy również do ładowania akumulatora Li-Ion 4,2 V, jeśli jest podłączony do wyjścia Charger. Za proces ładowania odpowiada układ MCP7381 realizujący algorytm ładowania o stałym natężeniu prądu/stałym napięciu, gdzie prąd ładowania jest ustawiony na 100 mA, a napięcie końcowe na 4,20 V.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3 pwr.png|none|600px|thumb|left]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguracja środowiska Arduino i program testowy  ====&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Czynności wstępne&amp;lt;/span&amp;gt;======&lt;br /&gt;
Podłączamy moduł Kamod ESP-C3 do komputera z zainstalowanym środowiskiem Arduino IDE. W oknie wyboru modułu wybieramy moduł &amp;#039;&amp;#039;ESP32C3 Dev Module&amp;#039;&amp;#039; i wirtualny port szeregowy COMx, poprzez który jest połączony moduł.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_1.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
W naszej procedurze testowej będziemy używali okna terminala, w którym będą wyświetlane wyniki działania programu. Żeby to było możliwe trzeba odblokować domyślnie zablokowaną opcję &amp;#039;&amp;#039;USB CDC On Boot&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_2.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Konfiguracja okna preferences&amp;lt;/span&amp;gt;======&lt;br /&gt;
Otwieramy okno preferencji &amp;#039;&amp;#039;File-&amp;gt;Preferences&amp;#039;&amp;#039;. W polu &amp;#039;&amp;#039;Additional boards manager ULRs&amp;#039;&amp;#039; zakładki &amp;#039;&amp;#039;Settings&amp;#039;&amp;#039; wpisujemy adres https://dl.espressif.com/dl/package_esp32_index.json&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_3.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Wybór typu procesora dla programowanego modułu&amp;lt;/span&amp;gt;======&lt;br /&gt;
Wybieramy kolejno zakładkę &amp;#039;&amp;#039;Tools&amp;#039;&amp;#039;, następnie &amp;#039;&amp;#039;Board&amp;#039;&amp;#039;, rodzinę procesorów &amp;#039;&amp;#039;esp32&amp;#039;&amp;#039; i moduł z procesorem &amp;#039;&amp;#039;ESP32C3&amp;#039;&amp;#039;. Każda zmiana modułu podłączonego do komputera przez USB będzie wymagała powtórzenia tego kroku. Jeżeli nie wykonamy go na początku, to można go wykonać przed kompilacją. W przeciwnym razie projekt nie zostanie prawidłowo skompilowany.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_4.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Instalowanie bibliotek&amp;lt;/span&amp;gt;======&lt;br /&gt;
Program testowy wymaga zainstalowania bibliotek obsługujących układy peryferyjne: akcelerometr ICM42670P, termometr/higrometr SHTC3 i 3-kolorową diodę LED typu WS2812B. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Instalowanie biblioteki do obsługi układu ICM42670P&amp;lt;/span&amp;gt;======&lt;br /&gt;
Klikamy na pionowym pasku narzędzi ikonę bibliotek. W oknie wyszukiwanie wpisujemy ICM42670, wybieramy &amp;#039;&amp;#039;ICM42670P by TDK/Invensense&amp;#039;&amp;#039; i klikamy &amp;#039;&amp;#039;Install&amp;#039;&amp;#039;. &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_5.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Instalowanie biblioteki do obsługi układu SHTC3&amp;lt;/span&amp;gt;======&lt;br /&gt;
Wybieramy bibliotekę &amp;#039;&amp;#039;Adafruit SHTC3 Library&amp;#039;&amp;#039; dostarczaną przez Adafruit. Wymaga ona doinstalowania powiązanych bibliotek - aby to zrobić w wyskakującym dodatkowym oknie &amp;#039;&amp;#039;Install library dependencies&amp;#039;&amp;#039; klikamy &amp;#039;&amp;#039;Install All&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_6.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Instalowanie biblioteki obsługującej 3-kolorową diodę RGB typu WS2812&amp;lt;/span&amp;gt;======&lt;br /&gt;
Do sterowania 3-kolorowej diody RGB zastosujemy bibliotekę dostarczana przez Adafruit - &amp;#039;&amp;#039;Adafruit NeoPixel&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_7.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Obsługa akcelerometru ICM42670P&amp;lt;/span&amp;gt;======&lt;br /&gt;
ICM42670P jest połączony z mikrokontrolerem za pomocą magistrali I2C. Do jej obsługi jest przeznaczona biblioteka Wire. Do inicjowania interfejsu I2S jest używana metoda begin z argumentami określającymi linie portów przypisane do sygnałów SDA i SCL &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#define I2C_SDA 10              //SDA IO10 &amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#define I2C_SCL 8               //SCL IO8 &amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Wire.begin(I2C_SDA, I2C_SCL); &amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Obsługa termometru/higrometru SHTC3&amp;lt;/span&amp;gt;======&lt;br /&gt;
Układ SHTC3 łączy się z mikrokontrolerem również za pomocą interfejsu I2C. Konfiguracja i inicjacja tego interfejsu została pokazana powyżej. Inicjalizacja biblioteki układu SHTC3 jest wykonywana standardowo przez metodę begin.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
shtc3.begin();&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Odczytywanie i konwersję wartości temperatury wykonuje metoda htc3.getEvent&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
htc3.getEvent(&amp;amp;humidity, &amp;amp;temp);         // read temp and humidity &amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dane wyjściowe są umieszczane w zmiennych  temp.temperature i humidity.relative_humidity i można je bezpośrednio wyświetlić. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Przykładowy wydruk odczytanych danych z czujnika SHTC3 na konsoli znakowej Arduino IDE&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_8.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Obsługa diody RGB WS2812B&amp;lt;/span&amp;gt;======&lt;br /&gt;
Tworzymy instancję WS2812B, w której określamy: ilość diod WS2812 połączonych w łańcuchu (NUM_PIXELS), oraz numer portu linii danych (PIN_WS2812B). Pozostałe parametry można zostawić domyślnie. U nas jest jedna dioda (NUM_PIXELS = 1) podłączona do linii poru DO2 (PIN_WS2812B =2)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#define PIN_WS2812B  2          // ESP32 pin that connects to WS2812B&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#define NUM_PIXELS     1        // The number of LEDs (pixels) on WS2812B&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inicjalizacja drivera jest standardowo wykonywana przez metodę begin:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
WS2812B.begin();              //WS2812 driver config&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Metoda setBrightness służy do ustawiania jasności świecenia wszystkich diod&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
WS2812B.setBrightness(50);    //WS8212 brightness&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
Metoda clear wygasza wszystkie diody, a metoda setPixelColor określa składowe koloru dla każdej z diod. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
WS2812B.setPixelColor(0, WS2812B.Color(255, 0, 0)); //kolor czerwony &amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
Skutki działania metod clear i setPixelColor są widoczne po wywołaniu metody show:  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
WS2812B.show();&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Sprawdzanie działania modułu WiFi &amp;lt;/span&amp;gt;======&lt;br /&gt;
Procedura testowa sprawdzająca działanie modułu WiFi polega na skanowaniu radiowej sieci WiFi i wyświetlaniu znalezionych identyfikatorów SSID lokalnych sieci wraz z poziomem sygnału radiowego, kanałem radiowym oraz rodzajami szyfrowania danych. &amp;lt;br&amp;gt;&lt;br /&gt;
Najpierw jest ustawiany tryb WIFI_STA, czyli tryb stacji. W tym trybie moduł ESP32 może się łączyć z sieciami WIFI.  Po połączeniu z ruterem moduł może żądać informacji z Internetu (jeżeli ruter jest połączony z Internetem), lub z urządzeń z lokalnej sieci rutera. Po ustawieniu tego trybu wykonujemy ewentualne rozłączenie z siecią (jeżeli moduł był wcześniej połączony): &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);  //station mode&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
WiFi.disconnect();         //disconnect WIFI network&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Możemy teraz skanować identyfikatory sieci WIFI za pomocą metody scanNetworks&amp;lt;br&amp;gt;&lt;br /&gt;
Metoda zwraca ilość wykrytych sieci  wspomniane już parametry:  poziom sygnału radiowego, kanał radiowy oraz rodzaj szyfrowania danych. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &lt;br /&gt;
numNetworks = WiFi.scanNetworks();  //scan WIFI networks&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   Serial.println(&amp;quot;Scan done&amp;quot;);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  if (numNetworks == 0)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;no networks found&amp;quot;);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  } &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Po wykonaniu skanowania można wyświetlić odczytane dane w konsoli i wykorzystać do w naszej aplikacji na przykład w celu połączenia z wybraną siecią. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &lt;br /&gt;
for (int i = 0; i &amp;lt; numNetworks; ++i) { &amp;lt;br&amp;gt;&lt;br /&gt;
      // Print SSID and RSSI for each network found&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.printf(&amp;quot;%2d&amp;quot;, i + 1);&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.printf(&amp;quot;%-32.32s&amp;quot;, WiFi.SSID(i).c_str());&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.printf(&amp;quot;%4ld&amp;quot;, WiFi.RSSI(i));&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.printf(&amp;quot;%2ld&amp;quot;, WiFi.channel(i));&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
      switch (WiFi.encryptionType(i)) {&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_OPEN:            Serial.print(&amp;quot;open&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WEP:             Serial.print(&amp;quot;WEP&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WPA_PSK:         Serial.print(&amp;quot;WPA&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WPA2_PSK:        Serial.print(&amp;quot;WPA2&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WPA_WPA2_PSK:    Serial.print(&amp;quot;WPA+WPA2&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print(&amp;quot;WPA2-EAP&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WPA3_PSK:        Serial.print(&amp;quot;WPA3&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WPA2_WPA3_PSK:   Serial.print(&amp;quot;WPA2+WPA3&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        case WIFI_AUTH_WAPI_PSK:        Serial.print(&amp;quot;WAPI&amp;quot;); break;&amp;lt;br&amp;gt;&lt;br /&gt;
        default:                        Serial.print(&amp;quot;unknown&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
      }&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println();&amp;lt;br&amp;gt;&lt;br /&gt;
      delay(10);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykładowy wydruk działania programu skanującego sieć WIFI na konsoli znakowej Arduino IDE&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_9.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Po wykonaniu skanowania i wyświetleniu danych trzeba wyczyścić dane, żeby przygotować moduł WiFi do kolejnego skanowania – metoda scanDelete &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &amp;#039;Courier New&amp;#039;, monospace&amp;quot;&amp;gt; &lt;br /&gt;
WiFi.scanDelete();&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#009999 &amp;quot;&amp;gt;Program testowy&amp;lt;/span&amp;gt;======&lt;br /&gt;
&lt;br /&gt;
Program testowy ma zadanie przetestować wszystkie komponenty umieszczone na płytce modułu. Test składa się z kolejnych kroków:&lt;br /&gt;
* Zapaleniu diody czerwonej LED podłączonej do linii portu IO7 &lt;br /&gt;
* Odczytaniu i wyświetleniu w konsoli Arduino IDE odczytanych danych z ICM42670P&lt;br /&gt;
* Odczytaniu i wyświetleniu w konsoli Arduino IDE odczytanych danych z SHTC3&lt;br /&gt;
* Skanowaniu sieci WIFI i wyświetleniu w konsoli Arduino IDE identyfikatorów SSID siłę sygnału radiowego, numer kanału WIFI i rodzaj kodowania danych w sieci dla każdej ze znalezionych sieci &lt;br /&gt;
* Zgaszeniu czerwonej diody LED&lt;br /&gt;
* Zapaleniu co 0,5 sekundy kolejnych diod WS2812B czerwonej, zielonej i niebieskiej&lt;br /&gt;
* Zgaszeniu wszystkich diod WS2812B i rozpoczęciu testu od nowa&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Poniżej pokazany jest fragment ekranu konsoli znakowej Arduino IDE wyświetlający jeden przebieg programu testowego.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Arduino_10.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kod programu testowego znajduje się poniżej, można go skompilować w środowisku Arduino. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;arduino&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;WiFi.h&amp;quot;&lt;br /&gt;
#include&amp;lt;Wire.h&amp;gt;               //I2s DRIVER&lt;br /&gt;
#include &amp;lt;Adafruit_NeoPixel.h&amp;gt;//RGB diode WS2812&lt;br /&gt;
#include &amp;quot;Adafruit_SHTC3.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ICM42670P.h&amp;quot;          //ICM42670P driver&lt;br /&gt;
&lt;br /&gt;
#define LED_BUILTIN 7           //LED IO7 to flash &lt;br /&gt;
&lt;br /&gt;
#define I2C_SDA 10              //SDA IO10 &lt;br /&gt;
#define I2C_SCL 8               //SCL IO8&lt;br /&gt;
#define PIN_WS2812B  2          // ESP32 pin that connects to WS2812B&lt;br /&gt;
#define NUM_PIXELS     1        // The number of LEDs (pixels) on WS2812B&lt;br /&gt;
&lt;br /&gt;
Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);&lt;br /&gt;
ICM42670 IMU(Wire,0);           //I2S addres 0x68&lt;br /&gt;
Adafruit_SHTC3 shtc3 = Adafruit_SHTC3();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
    //WS28212 setup   &lt;br /&gt;
    WS2812B.begin();              //WS2812 driver config&lt;br /&gt;
    WS2812B.setBrightness(50);    //WS8212 brightness&lt;br /&gt;
    //LED flash setup &lt;br /&gt;
    pinMode(LED_BUILTIN, OUTPUT);  //IO7 output &lt;br /&gt;
    //serial setup&lt;br /&gt;
     Serial.begin(115200);&lt;br /&gt;
     delay(2000);&lt;br /&gt;
     while(!Serial);                 //wait to serial ready  &lt;br /&gt;
    //I2S line setup &lt;br /&gt;
    Wire.begin(I2C_SDA, I2C_SCL);                    //setup I2S driver&lt;br /&gt;
    IMU.begin();                                      //setup ICM42670P driver&lt;br /&gt;
    // Start accelerometer and gyroscope&lt;br /&gt;
    IMU.startAccel(100, 16); // 100 Hz, ±16g&lt;br /&gt;
    IMU.startGyro(100, 2000); // 100 Hz, ±2000 dps&lt;br /&gt;
    shtc3.begin();&lt;br /&gt;
    WiFi.mode(WIFI_STA);&lt;br /&gt;
    WiFi.disconnect();&lt;br /&gt;
    delay(100);&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
void loop()&lt;br /&gt;
 {&lt;br /&gt;
  int numNetworks;&lt;br /&gt;
  sensors_event_t humidity, temp;&lt;br /&gt;
  inv_imu_sensor_event_t imu_event;&lt;br /&gt;
   digitalWrite (LED_BUILTIN, HIGH);&lt;br /&gt;
  //ICM42670P register read, convert and &lt;br /&gt;
  Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  int ret = IMU.getDataFromRegisters(imu_event);   //ICM42670P register read &lt;br /&gt;
  Serial.println(ret);&lt;br /&gt;
  if (ret == 0) {&lt;br /&gt;
// Convert acceleration to g&lt;br /&gt;
  float accelX = imu_event.accel[0] / 2048.0;&lt;br /&gt;
  float accelY = imu_event.accel[1] / 2048.0;&lt;br /&gt;
  float accelZ = imu_event.accel[2] / 2048.0;&lt;br /&gt;
&lt;br /&gt;
// Convert gyroscope to dps&lt;br /&gt;
  float gyroX = imu_event.gyro[0] / 16.4;&lt;br /&gt;
  float gyroY = imu_event.gyro[1] / 16.4;&lt;br /&gt;
  float gyroZ = imu_event.gyro[2] / 16.4;&lt;br /&gt;
//print converted result&lt;br /&gt;
  Serial.print(&amp;quot;ICM42670P AccelX:&amp;quot;);&lt;br /&gt;
  Serial.println(accelX);&lt;br /&gt;
  Serial.print(&amp;quot;ICM42670P AccelY:&amp;quot;);&lt;br /&gt;
  Serial.println(accelY);&lt;br /&gt;
  Serial.print(&amp;quot;ICM42670P AccelZ:&amp;quot;);&lt;br /&gt;
  Serial.println(accelZ);&lt;br /&gt;
  Serial.print(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n&amp;quot;); &lt;br /&gt;
  Serial.print(&amp;quot;ICM42670P GyroX:&amp;quot;);&lt;br /&gt;
  Serial.println(gyroX);&lt;br /&gt;
  Serial.print(&amp;quot;ICM42670P GyroY:&amp;quot;);&lt;br /&gt;
  Serial.println(gyroY);&lt;br /&gt;
  Serial.print(&amp;quot;ICM42670P GyroZ:&amp;quot;);&lt;br /&gt;
  Serial.println(gyroZ);&lt;br /&gt;
  Serial.print(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
   Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;ICM42670PTemperature:&amp;quot;);&lt;br /&gt;
  Serial.println((imu_event.temperature/128.0)+25.0);&lt;br /&gt;
  Serial.print(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
  Serial.print(&amp;quot;SHTC3P register read.........:&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  shtc3.getEvent(&amp;amp;humidity, &amp;amp;temp);// read temp and humidity &lt;br /&gt;
  &lt;br /&gt;
  Serial.print(&amp;quot;SHTC3 Temperature: &amp;quot;); Serial.print(temp.temperature); Serial.println(&amp;quot; deg C&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;SHTC3 Humidity: &amp;quot;); Serial.print(humidity.relative_humidity); Serial.println(&amp;quot;% rH&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;********************************&amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
      numNetworks = WiFi.scanNetworks();&lt;br /&gt;
  &lt;br /&gt;
    Serial.println(&amp;quot;Scan done&amp;quot;);&lt;br /&gt;
  if (numNetworks == 0) {&lt;br /&gt;
    Serial.println(&amp;quot;no networks found&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.print(numNetworks);&lt;br /&gt;
    Serial.println(&amp;quot; networks found&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Nr | SSID                             | RSSI | CH | Encryption&amp;quot;);&lt;br /&gt;
    for (int i = 0; i &amp;lt; numNetworks; ++i) {&lt;br /&gt;
      // Print SSID and RSSI for each network found&lt;br /&gt;
      Serial.printf(&amp;quot;%2d&amp;quot;, i + 1);&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
      Serial.printf(&amp;quot;%-32.32s&amp;quot;, WiFi.SSID(i).c_str());&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
      Serial.printf(&amp;quot;%4ld&amp;quot;, WiFi.RSSI(i));&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
      Serial.printf(&amp;quot;%2ld&amp;quot;, WiFi.channel(i));&lt;br /&gt;
      Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
      switch (WiFi.encryptionType(i)) {&lt;br /&gt;
        case WIFI_AUTH_OPEN:            Serial.print(&amp;quot;open&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WEP:             Serial.print(&amp;quot;WEP&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WPA_PSK:         Serial.print(&amp;quot;WPA&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WPA2_PSK:        Serial.print(&amp;quot;WPA2&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WPA_WPA2_PSK:    Serial.print(&amp;quot;WPA+WPA2&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print(&amp;quot;WPA2-EAP&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WPA3_PSK:        Serial.print(&amp;quot;WPA3&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WPA2_WPA3_PSK:   Serial.print(&amp;quot;WPA2+WPA3&amp;quot;); break;&lt;br /&gt;
        case WIFI_AUTH_WAPI_PSK:        Serial.print(&amp;quot;WAPI&amp;quot;); break;&lt;br /&gt;
        default:                        Serial.print(&amp;quot;unknown&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      Serial.println();&lt;br /&gt;
      delay(10);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
    WiFi.scanDelete();&lt;br /&gt;
    digitalWrite (LED_BUILTIN, LOW);&lt;br /&gt;
    WS2812B.clear();  // set all pixel colors to &amp;#039;off&amp;#039;. It only takes effect if pixels.show() is called&lt;br /&gt;
    WS2812B.setPixelColor(0, WS2812B.Color(255, 0, 0));  // it only takes effect if pixels.show() is called&lt;br /&gt;
    WS2812B.show();    &lt;br /&gt;
    delay(500); &lt;br /&gt;
    WS2812B.setPixelColor(0, WS2812B.Color(0, 255, 0));  // it only takes effect if pixels.show() is called&lt;br /&gt;
    WS2812B.show(); &lt;br /&gt;
    delay(500); &lt;br /&gt;
    WS2812B.setPixelColor(0, WS2812B.Color(0, 0, 255));  // it only takes effect if pixels.show() is called&lt;br /&gt;
    WS2812B.show(); &lt;br /&gt;
    delay(500); &lt;br /&gt;
     WS2812B.clear();  // set all pixel colors to &amp;#039;off&amp;#039;. It only takes effect if pixels.show() is called&lt;br /&gt;
     WS2812B.show(); &lt;br /&gt;
    delay(100);  // 500ms pause between each pixel&lt;br /&gt;
  //}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Konfiguracja środowiska do programowania w języku Rust i programy testowe   ====&lt;br /&gt;
Najpierw pokażemy, jak szybko pobrać i skonfigurować niezbędne komponenty i narzędzia programowe do wygenerowania prostego projektu w języku Rust. Po skonfigurowaniu narzędzi będzie można projekt skompilować i przesłać do pamięci flash. Wszystkie czynności są wykonywane w systemie operacyjnym Linux Ubuntu wersja 24.04.2 LTS. Komputer musi być podłączony do Internetu. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#ff9900 &amp;quot;&amp;gt;Włączenie repozytorium Universe&amp;lt;/span&amp;gt;======&lt;br /&gt;
&amp;quot;Universe&amp;quot; to standardowe repozytorium dla Ubuntu. Repozytorium jest utrzymywane przez społeczność i zapewnia bezpłatne oprogramowanie typu open source. Domyślnie jest włączone w najnowszych wersjach Ubuntu. Jednak, gdyby tak nie było to możemy go włączyć za pomocą wiersza poleceń: &lt;br /&gt;
&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_1.png|none|800px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#ff9900 &amp;quot;&amp;gt;Instalacja pakietów libssl-dev, libudev, kompilatora C/C++ clang   i interpretera Python 3&amp;lt;/span&amp;gt;======&lt;br /&gt;
Pakiet libssl-dev zawiera protokoły kryptograficzne SSL i TLS do bezpiecznej komunikacji przez Internet. Pakiet libudev udostępnia interfejs API do introspekcji i wyliczania urządzeń na poziomie lokalnym system. Clang jest kompilatorem języków programowania C, C++ i Objective-C i jest częścią projektu LLVM. Znany z szybkiego czasu kompilacji i doskonałej diagnostyki, Clang może również działać jako zamiennik GCC. W projekcie jest używany linker Clang. Python3-pip jest pakietem instalacyjnym języka Python ver3, a python3-venv instaluje środowisko wirtualne.&lt;br /&gt;
&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_2.png|none|800px|thumb|left]]&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_3.png|none|800px|thumb|left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#ff9900 &amp;quot;&amp;gt;Instalacja pakietów Rust i menadżera Cargo&amp;lt;/span&amp;gt;======&lt;br /&gt;
Rust to język programowania ogólnego przeznaczenia, kładący nacisk na wydajność, bezpieczeństwo typów i współbieżność. Cargo to menedżer pakietów Rust. Cargo pobiera zależności pakietu Rust, kompiluje pakiety, tworzy pakiety dystrybucyjne i przesyła je do crates.io, rejestru pakietów społeczności Rust.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_4.png|none|800px|thumb|left]]&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_5.png|none|800px|thumb|left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Instalacja niezbędnych modułów Cargo: &lt;br /&gt;
* espflash potrzebny do programowania pamięci Flash mikrokontrolera &lt;br /&gt;
* ldproxy   przekazanie argumentów konsolidatora   &lt;br /&gt;
* cargo-generate do generowania projektów według szablonu&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_6.png|none|800px|thumb|left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#ff9900 &amp;quot;&amp;gt;Tworzenie projektu&amp;lt;/span&amp;gt;======&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_7.png|none|800px|thumb|left]]&amp;lt;br&amp;gt;&lt;br /&gt;
Wykonanie tego polecenia otwiera okno uproszczonego menadżera projektu. Menadżer poprosi nas o: &lt;br /&gt;
* wpisanie nazwy projektu na przykład test-modulu-esp32c3&lt;br /&gt;
* wybranie z listy typu MCU – w naszym przypadku będzie to ESP32C3&lt;br /&gt;
* wybranie wersji ESP-IDF wybieramy v5.3 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pozostałe opcje można wybrać tak jak na rysunku poniżej&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_8.png|none|800px|thumb|left]]&amp;lt;br&amp;gt;&lt;br /&gt;
Po wybraniu wszystkich opcji menadżer projektu utworzy katalog o nazwie projektu, w którym umieści niezbędne pliki. W katalogu src projektu menadżer umieści plik źródłowy main.rs ze szkieletem wczytanym poleceniem cargo generate. &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_9.png|none|800px|thumb|left]]&lt;br /&gt;
W tym momencie mamy już wszystko, żeby wyedytowany plik main.rs kompilować, przesyłać swój program do pamięci flash i uruchamiać jego działanie. Wszystkie te czynności są wykonywane automatycznie po wykonaniu polecenie. &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_10.png|none|800px|thumb|left]]&amp;lt;br&amp;gt;&lt;br /&gt;
Jeżeli wykonujemy to pierwszy raz to polecenie będzie pobierało z sieci szereg niezbędnych komponentów i może to trochę potrwać.&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#ff9900 &amp;quot;&amp;gt;Testowanie modułu – miganie diody D2 podłączonej do portu IO7&amp;lt;/span&amp;gt;======&lt;br /&gt;
Na poniższym listingu jest wersja źródłowa programu cyklicznie zapalającego i gaszącego diodę LED co 500msek. Należy go umieścić w pliku main.rd (katalog src) i wykonać polecenie cargo run. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
use esp_idf_svc::hal::{delay::FreeRtos, gpio::PinDriver, peripherals::Peripherals};&lt;br /&gt;
//use esp_idf_sys as _; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported&lt;br /&gt;
fn main() {&lt;br /&gt;
    // It is necessary to call this function once. Otherwise some patches to the runtime&lt;br /&gt;
    // implemented by esp-idf-sys might not link properly. See https://github.com/esp-rs/esp-idf-template/issues/71&lt;br /&gt;
    esp_idf_svc::sys::link_patches();&lt;br /&gt;
let peripherals = Peripherals::take().expect(&amp;quot;Failed to take peripherals&amp;quot;);&lt;br /&gt;
    let mut led = PinDriver::output(peripherals.pins.gpio7).expect(&amp;quot;Failed to create led driver&amp;quot;);&lt;br /&gt;
    loop {&lt;br /&gt;
        led.toggle().expect(&amp;quot;Failed to toggle LED&amp;quot;);&lt;br /&gt;
        FreeRtos::delay_ms(500);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======&amp;lt;span style=&amp;quot;color:#FFFFFF; background:#ff9900 &amp;quot;&amp;gt;Testowanie modułu – odczyt danych z termometru SHTC3 i akceleratora ICM42670======&lt;br /&gt;
Podobnie jak w poprzednim przykładzie należy wpisać do pliku poniższa wersję źródłową i wykonać polecenia cargo run.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
use esp_idf_svc::hal::{&lt;br /&gt;
    delay::FreeRtos,&lt;br /&gt;
    i2c::{I2cConfig, I2cDriver},&lt;br /&gt;
    prelude::*,&lt;br /&gt;
};&lt;br /&gt;
//use esp_idf_sys as _;&lt;br /&gt;
use icm42670::{accelerometer::vector::F32x3, prelude::_accelerometer_Accelerometer, Address};&lt;br /&gt;
use shtcx::{Measurement, PowerMode::*};&lt;br /&gt;
&lt;br /&gt;
fn main() {&lt;br /&gt;
    esp_idf_svc::sys::link_patches();&lt;br /&gt;
&lt;br /&gt;
    let peripherals = Peripherals::take().expect(&amp;quot;Failed to take peripherals&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    let i2c_config = I2cConfig::new()&lt;br /&gt;
        .baudrate(100.kHz().into())&lt;br /&gt;
        .sda_enable_pullup(true)&lt;br /&gt;
        .scl_enable_pullup(true);&lt;br /&gt;
&lt;br /&gt;
    let shared_bus = shared_bus::BusManagerSimple::new(&lt;br /&gt;
        I2cDriver::new(&lt;br /&gt;
            peripherals.i2c0,&lt;br /&gt;
            peripherals.pins.gpio10,&lt;br /&gt;
            peripherals.pins.gpio8,&lt;br /&gt;
            &amp;amp;i2c_config,&lt;br /&gt;
        )&lt;br /&gt;
        .expect(&amp;quot;Failed to create i2c driver&amp;quot;),&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    let mut shtc3 = shtcx::shtc3(shared_bus.acquire_i2c());&lt;br /&gt;
    let mut icm42670 = icm42670::Icm42670::new(shared_bus.acquire_i2c(), Address::Primary)&lt;br /&gt;
        .expect(&amp;quot;Failed to instantiate icm42670&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    loop {&lt;br /&gt;
        let Measurement {&lt;br /&gt;
            temperature,&lt;br /&gt;
            humidity,&lt;br /&gt;
        } = shtc3&lt;br /&gt;
            .measure(NormalMode, &amp;amp;mut FreeRtos)&lt;br /&gt;
            .expect(&amp;quot;Failed to read SHTC3 temp/hum&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        println!(&lt;br /&gt;
            &amp;quot;SHTC3:\n\t- temp: {}\n\t- hum: {}&amp;quot;,&lt;br /&gt;
            temperature.as_degrees_celsius(),&lt;br /&gt;
            humidity.as_percent()&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        let temp = icm42670&lt;br /&gt;
            .temperature()&lt;br /&gt;
            .expect(&amp;quot;Failed to read ICM42670 temp&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        let F32x3 {&lt;br /&gt;
            x: ax,&lt;br /&gt;
            y: ay,&lt;br /&gt;
            z: az,&lt;br /&gt;
        } = icm42670&lt;br /&gt;
            .accel_norm()&lt;br /&gt;
            .expect(&amp;quot;Failed to read ICM42670 accel data&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        let F32x3 {&lt;br /&gt;
            x: gx,&lt;br /&gt;
            y: gy,&lt;br /&gt;
            z: gz,&lt;br /&gt;
        } = icm42670&lt;br /&gt;
            .gyro_norm()&lt;br /&gt;
            .expect(&amp;quot;Failed to read ICM42670 gyro data&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        println!(&lt;br /&gt;
            &amp;quot;ICM42670:\n\t- temp: {}\n\t- accel: {}, {}, {}\n\t- gyro: {}, {}, {}&amp;quot;,&lt;br /&gt;
            temp, ax, ay, az, gx, gy, gz&lt;br /&gt;
        );&lt;br /&gt;
        &lt;br /&gt;
        FreeRtos::delay_ms(1000);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Po wykonaniu komendy cargo run po skompilowaniu i zapisaniu pamięci flash na ekranie terminala będą co sekundę wyświetlane odczytane po magistrali I2C dane z termometru i akceleratora.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:KAmodESP32-C3_Rust_11.png|850px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wymiary  ====&lt;br /&gt;
Wymiary płytki Kamod ESP32-C3 to 63 x 27 mm. &lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:KAmodESP32-C3_wym.png|none|800px|thumb|center]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Linki zewnętrzne  ====&lt;br /&gt;
*[https://www.espressif.com/en/products/socs/esp32-c3 Dokumentacja układu ESP32-C3]&lt;br /&gt;
*[https://sensirion.com/products/catalog/SHTC3 Dokumentacja układu SHTC3]&lt;br /&gt;
*[https://product.tdk.com/en/search/sensor/mortion-inertial/imu/info?part_no=ICM-42670-P Dokumentacja układu ICM42670]&lt;br /&gt;
*[https://www.lcsc.com/datasheet/C79313.pdf Dokumentacja układu SY8088]&lt;br /&gt;
*[https://ww1.microchip.com/downloads/en/DeviceDoc/MCP73831-Family-Data-Sheet-DS20001984H.pdf Dokumentacja układu MCP73831]&lt;br /&gt;
*[https://rust-lang.org/learn/ Get started with Rust]&lt;br /&gt;
*[https://doc.rust-lang.org/cargo/ Cargo Rust dokumentacja]&lt;br /&gt;
*[https://dev.to/cyrilmarpaud/embedded-rust-on-esp32c3-board-a-hands-on-quickstart-guide-28mf Rust przykłady]&lt;/div&gt;</summary>
		<author><name>Grzegorzbecker</name></author>
	</entry>
</feed>