HM-13 plus Chiński dodatek

Popularne moduły niebieskich sieci ....
ODPOWIEDZ
Awatar użytkownika
l3n1n
Moderator
Posty: 186
Rejestracja: 28 paź 2017, 8:46
Lokalizacja: 3M

HM-13 plus Chiński dodatek

Post autor: l3n1n » 26 kwie 2018, 13:09

Swego czasu nas Admin, Guru, najlepszy przyjaciel zielonych elektroników i elektroniczno-programistycznych lamerów, niejaki SunRiver, znany ze swej złośliwości i uczynności, Zielona Żaba zresztą :), przesłał mi w prezencie takiego HM-13, o którym napisał w poście powyżej. Gest piękny dla mnie, zwłaszcza że nic nie chciał za to i pokrył koszty przesyłki.
Leżało toto u mnie, bo nie miałem ani czasu ani możliwości by pobawić się tym cudeńkiem. Jednak w tak zwanym międzyczasie zamówiłem w Chinlandii płytkę, która umożliwia zabawę z tym cudeńkiem, bez tworzenia kablowych pajączków i tym podobnych stworzeń. Płytka przybyła, zobaczyła i zdobyła... wraz z HM-13 moje zainteresowanie i uwagę.

Obrazek

Jak widać żółci bracia na folii nie oszczędzali :). Mam jeden modulik to i płytek więcej niż potrzeba nie zamawiałem. Po rozpakowaniu widać, że płytka jest dosyć uniwersalna.

Obrazek

Można użyć ja do modułów HM-01, HM-02, HM-09, HM-10, HM12-, HM-16.
Lub, obracając ją na drugą stronę do mniejszych modułów: HM-05, HM-06, HM-07, HM-11, HM-13, HM-17.

Obrazek

Ja tę właśnie stronę wykorzystałem. Dolutowałem dwie diody LED (805) i takiej samej wielkości rezystorki 1K żeby ledy nie "dawały" za mocno po oczach.

Obrazek

Do tego dołączyłem goldpiny według własnych potrzeb i zacząłem zabawę. podłączyłem HM-13 do zasilacza warsztatowego na 3,3V zgodnie z DS.

Obrazek

Dioda LED2 jednostajnie i wesoło zaczęła migać. Wyszukałem urządzenie w Windows 10 i sparowałem z moim laptopem. Nazwa urządzenia to HMSoft. Domyślny pin do sparowania podany w DS to:

8. AT Commands
Factory default setting:
EDR Name HMSoft, Slave role, PinCode 1234
BLE Name HMSoft, Slave role, PinCode 000000
Baud: 115200, N, 8, 1;


Obrazek

Odnalazłem w Menedżerze urządzeń odpowiednie porty COM i już moglem się połączyć przy pomocy SunDEBUnala, czyli SunRiverowego programiku stworzonego do taki między innymi celów w chwili napadu szaleństwa :). Trzeba przyznać, że programik ma duże możliwości, choć jeszcze nie wszystko działa, jak to sobie nasz admin wymyślił. Najlepiej określa to stwierdzenie: "Sytuacja jest dynamiczna" bo kolejne napady szaleństwa skutkują kolejnymi ficzerami w programie, które zaskakują pomysłowością oraz użytecznością.

Ale wracając do modułu HM-13, gdy już mamy go sparowany z komputerem, dioda LED2 przestaje migać i jarzy się jednostajnym światełkiem. Zwieramy piny RX z TX i wysyłamy do naszego modułu komendę AT, która natychmiast do nas wraca, dzięki zwartym pinom Rx/Tx. Widać to na zamieszczonym poniżej zrzucie ekranu.

Obrazek
Teraz przydałoby się połączyć tego BT z jakimś sensownym urządzenie w równie sensownym celu, jednak o tym może trochę później, w dalszej części tych lamerskich wypocin, absolutnie nikomu nie potrzebnych, jednak pozwalający dać upust moim samobójczym instynktom.

CDN (w bliżej nieokreślonym czasie o ile Zielony mnie nie zbanuje za niewybredne żarty ;p).

Dodano po 14 minutach 53 sekundach:
Sun, teraz zauważyłem, że część z tego co napisałem było juz u ciebie na blogu. Weź usuń tego mojego posta.

Awatar użytkownika
l3n1n
Moderator
Posty: 186
Rejestracja: 28 paź 2017, 8:46
Lokalizacja: 3M

Re: HM-13 plus Chiński dodatek

Post autor: l3n1n » 30 kwie 2018, 8:59

W związku z tym, że Sun stwierdził iż powinienem opisywać swoje doświadczenia z HM-13, będę kontynuował. Może to nikomu się nie przyda, ale dla mnie z pewnością będzie to jakaś forma notatnika do zapamiętywania własnych doświadczeń z tym układem.

Postanowiłem podłączyć mojego HM-13 do płytki kupionej w jakiejś promocji na kamami.pl z mikrokontrolerem stm32f103c6. Płytka nosi kiepską nazwę ZL42ARM, ale w sumie nie jest zła a do moich celów jest aż nadto wystarczająca.

Obrazek

Według noty, ma cztery szeregi pinów, z których pierwszy od lewej (gdy patrzymy na płytke pionowo, zgodnie z napisami) to port A. Piny są ułożone tak, że poza pinami wyjściowymi mamy do dyspozycji w każdym szeregu, a właściwie dwuszeregu pin PLUS i MINUS. Dostajemy tam zasilenie 3.3V co jest dla nas bardzo istotne, gdyż nie musimy się martwić o zewnętrzne zasilanie dla naszego BT.
Podłaczyłem Rx z HM-13 do PIN 2 portu A, natomiast Tx do PIN 3 portu A. Płytkę zasiliłem poprzez gniazdo microusb znajdujące się na płytce z laptopa a do złącza JTAG podłączyłem J-linka. Jako środowisko programistyczne (szumna nazwa :) ) użyłem Visual Studio z zakupionym VisualGDB. W tym miejscu zaznaczę (i nie jest to żadna kryptoreklama), że jest to naprawdę oprogramowanie warte każdej złotówki, jaką na nie wydałem :).

Tak wygląda zestaw po zmontowaniu:

Obrazek

Teraz trzeba napisać odpowiedni kod:

Kod: Zaznacz cały

// inkludujemy potrzebne biblioteki

#include <stm32f1xx_hal.h> 
#include <string.h>

//włączamy systemowy budzik
void SysTick_Handler(void)
{
	HAL_IncTick();
	HAL_SYSTICK_IRQHandler();
}

UART_HandleTypeDef uart;

//funkcja wysyłania danych

void sendString(char* s)
{
	//&uart - wykorzystywany interfejs, (uint8_t*)s adres bufora, strlen(s) wielkość bufora, oraz timeout w milisekundach
	HAL_UART_Transmit(&uart, (uint8_t*)s, strlen(s), 1000); 
}
int main(void)
{	
	//ustawiamy systemowy zegareczek na 8MHz
	SystemCoreClock = 8000000;
	//Inicjujemy 
	HAL_Init();
	
	//Uruchamiamy zegar wyjscia/wejścia portu A
	__GPIOA_CLK_ENABLE();
	//uruchamiamy zegar USARTA
	__USART2_CLK_ENABLE();
	GPIO_InitTypeDef GPIO_InitStructure;

	
	//Linię wyjściowa Tx ustawiamy na pin 2 portu A, ustawiamy wszystkie parametry
	GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
	GPIO_InitStructure.Pin = GPIO_PIN_2;
	GPIO_InitStructure.Pull = GPIO_NOPULL;
	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//Linię wyjściowa Rx ustawiamy na pin 3 portu A
	GPIO_InitStructure.Mode = GPIO_MODE_AF_INPUT;
	GPIO_InitStructure.Pin = GPIO_PIN_3;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	//ustawiamy parametry transmisji 
	uart.Instance = USART2;
	uart.Init.BaudRate = 115200;
	uart.Init.WordLength = UART_WORDLENGTH_8B;
	uart.Init.Parity = UART_PARITY_NONE;
	uart.Init.StopBits = UART_STOPBITS_1;
	uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
	uart.Init.OverSampling = UART_OVERSAMPLING_16;
	uart.Init.Mode = UART_MODE_TX_RX;
	HAL_UART_Init(&uart);

	for (;;)
	
	{
		//w pętli wysyłamy komunikat (stringa)
		sendString("Witajcie przyjaciele z forum.sunduino.pl\r\n");
		
		// ustawiamy delaya na porządaną przez nas wartość
		HAL_Delay(100);
	}
}
Nie jest to może mistrzowski kod i mistrzowskie rozwiązanie. A rozwiązań pewnie jest mnóstwo.
Ja musiałem teraz sprawdzić czy działa. Tym razem odpaliłem RealTerm, ustawiłem odpowiedni port, i transmisję i....

Obrazek

No i wygląda, że zadziałało :).
Zobaczymy, co dalej można z tym fantem począć...

ODPOWIEDZ