Skocz do zawartości

Kurs Qt – #4 – aplikacja mobilna, łączność Bluetooth z Arduino


Pomocna odpowiedź

@Matthew11 dzięki, oczywiście działa

tak sobie myślę, czy lepszym rozwiązaniem nie byłoby utworzenie nowego obiektu typu ui, zamiast nowego QWidget. Teraz np mam problem z wyświetleniem wartości analogowej z arduino, która jest odczytywana za pomocą metody z MainWindow, a wyświetlana ma być na control.

Nie próbowałem jeszcze tego sposobu z dwoma ui w jednej klasie, ale wydaje mi się, że mogłoby się takie coś udać. myślisz, że ma to sens, albo czy jest w ogóle możliwe? czy raczej kombinować z sygnałami i slotami?

Link do komentarza
Share on other sites

16 godzin temu, kabaczek napisał:

Nie próbowałem jeszcze tego sposobu z dwoma ui w jednej klasie, ale wydaje mi się, że mogłoby się takie coś udać. myślisz, że ma to sens, albo czy jest w ogóle możliwe? czy raczej kombinować z sygnałami i slotami?

Nie znam na tyle QtWidgets, ale nie wydaje mi się to dobrym rozwiązaniem (albo możliwym). Zdecydowanie łatwiej będzie rozsyłać informacje za pomocą sygnałów i slotów. Najlepiej zaimplementować oba rozwiązania i wybrać to, które jest bardziej eleganckie.

Link do komentarza
Share on other sites

Cześć,

czy możliwe jest zrobienie takiego programu używając Bluetooth 4.0?

Kupiłem wcześniej taki moduł: [Moduł Bluetooth 4.0 BLE - HM-10 MLT-BT05 - 3,3V/5V], niestety poradnik na oficjalnej stronie Qt jest dla mnie niezrozumiały (walczyłem kilka godzin i niewiele udało mi się zrobić).

Link do komentarza
Share on other sites

@MateoS07 W takiej formie jak w kursie (klasy przeznaczone do BT Classic) zapewne nie połączysz się z tym modułem - ale nie zaszkodzi sprawdzić analizując ewentualne błędy raportowane przez biblioteki Qt. 

Wypróbuj też aplikację BLE Scanner (Scan, Connect, Find Lost BLE Devices) powinna Ci ona podpowiedzieć co Twój moduł oferuje.

BLE opiera swoje działanie o usługi i charakterystyki (services and characteristics) - więcej o tym w tym poradniku - a przeglądając dokumentację Twojego modułu można tam doszukać się informacji o czymś podobnym. Ciebie zapewne interesuje usługa o nazwie UART Service (o ile Twój moduł na coś takiego pozwala).

Natomiast tutaj znajdziesz program napisany w Qt, który obsługuje taką usługę.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Tworze apke desktopową w Qt. Ma ona łączyć się z hc-05. Nie ważne czego nie zrobię dostaje komunikat: qt.bluetooth: Dummy backend running. Qt Bluetooth module is non-functional. Podobno QtBluetooth działa na windowsie tylko używając MSVC, ja kompiluje mingw. Czy muszę przejść na msvc czy o co tu chodzi? A jeśli tak to jak to zrobić, na MSVC 2019 kit projekt się wysypuje i nie kompiluje...

Link do komentarza
Share on other sites

@Snerg Wbrew tego co mówi dokumentacja:

451902784_Zrzutekranu2022-12-04161700.thumb.png.b713655f6901db787320a66f5fcc71f7.png

Rzeczywiście jest tak jak mówisz, że BT na Windowsie (testuję na Qt 5.15.2) przy buildzie za pomocą MinGW rzuca ostrzeżeniem w czasie działania, natomiast przy buildzie za pomocą MSVC działa jak należy.

Rzecz polega na tym, że trzeba mieć zainstalowany kompilator MSVC i pobrane źródła/binarki Qt zbudowane za pomocą MSVC - Qt dla MinGW i dla MSVC dostarcza osobne buildy. Więc ja np. mam zainstalowane:

551246047_Zrzutekranu2022-12-04162216.png.9adde528b9d89d26ba9283e09b9d7f73.png

A tak wygląda konfiguracja wykryta przez QtCreator:

971164952_Zrzutekranu2022-12-04162437.thumb.png.c5289bf6c023df7465fb232685790eb3.png

MSVC zainstalowałem instalatorem od Microsoftu - zainstalowałem taką wersję:

527171107_Zrzutekranu2022-12-04162624.thumb.png.c23ded0353ac9c7e67544d9f587c109d.png


Podsumowując. Musisz pobrać Qt zbudowane za pomocą MSVC. Następnie zainstalować narzędzie budowania pod MSVC. Następnie może zrestartować system i zobaczyć czy QtCreator wykrył, że jest zainstalowany MSVC i pobrane zostało Qt dla MSVC - robiłem to dawno temu, ale pamiętam, ze QtCreator sam wykonał robotę i nie musiałem nic konfigurować.

Link do komentarza
Share on other sites

@Matthew11

Mam pobrane składniki do MSVC. Pracuje na Qt 6.4.0. Qt co prawda wykrywa odpowiednie zestawy (kit) ale przy każdym wysypuje komunikat: No CMake configuration found. Siedzę nad tym już cały dzień i mam za sobą z milion tutoriali na yt jak dodać CMake do Qt, jak grochem o ścianę. Dodam tyle że mam CMake 3.25.1 i w ustawieniach edit->preferences wygląda to tak jak u Ciebie. Natomiast w momencie odpalania wyskakuje błąd że nie ma CMake'a. Działa jedynie build na mingw i msys.

Wobec tego pytanie czy dalej bawić się z tą wersją Qt czy wywalić i inną (np. 5.15.2 jak sugerujesz)

Link do komentarza
Share on other sites

@Snerg Dodawać CMake ręcznie nie musisz. Jak go zainstalujesz instalatorem Qt (jest tam gdzieś w zakładce dodatkowych narzędzi) to on z automatu będzie poprawnie użyty w QtCreator. 

Czy próbować z Qt 6.4? Trzeba sprawdzić czy support dla BT jest już gotowy. Qt6 konsekwentnie dodawano nowe moduły w coraz to nowszych wersjach.

1.Ja bym zaczął od tego czy działa Ci cokolwiek z Qt6 budowane CMakiem pod MSVC - np. testowy projekt. Jeśli tak to możesz szukać dalej.

2.W Qt6 moduły trzeba instalować dodatkowo (w Qt5 większość była instalowana od razu) sprawdź czy masz zainstalowany moduł BT (chyba zakładka Additional Libraries w instalatorze):

987709782_Zrzutekranu2022-12-04185415.thumb.png.b0160680670fd7989900a8d61927d508.png

3. Jeśli 1. i 2. wydaje się i nie działa to wróciłbym do Qt5.

Edytowano przez Matthew11
Link do komentarza
Share on other sites

Treker
Ta treść została wynagrodzona przez moderatora!

Matthew11 otrzymał odznakę: "Za udzielenie wzorowej odpowiedzi"

@Snerg Zainstalowałem właśnie Qt6.4.1 i moduł Qt Connectivity. Kit wygląda tak:

505509195_Zrzutekranu2022-12-04192906.thumb.png.06d17e033650e7386ab2214bc2b86f29.png

Musiałem wybrać odpowiedni kompilator (C i C++) czyli MSVC 17.2 wersja amd64 albo x86_amd64 (bo domyślnie QtCreator chciał tam używać Clanga). Usunąłem też z PATH z zmiennych środowiskowych ręcznie dodanego CMake'a, LLVM i MinGW (używam wielu kompilatorów). 

Stworzyłem projekt typu QtQuick i zrobiłem takiego CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)

project(Test VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 6.2 COMPONENTS Quick Bluetooth REQUIRED)

qt_add_executable(appTest
    main.cpp
)

qt_add_qml_module(appTest
    URI Test
    VERSION 1.0
    QML_FILES main.qml 
)

target_link_libraries(appTest
    PRIVATE Qt6::Quick Qt6::Bluetooth)

I taki main.cpp:

#include <QBluetoothLocalDevice>
#include <QDebug>
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[]) {
  QGuiApplication app(argc, argv);

  QBluetoothLocalDevice localDevice;
  QString localDeviceName;

  // Check if Bluetooth is available on this device
  if (localDevice.isValid()) {

    // Turn Bluetooth on
    localDevice.powerOn();

    // Read local device name
    localDeviceName = localDevice.name();

    // Make it visible to others
    localDevice.setHostMode(QBluetoothLocalDevice::HostDiscoverable);

    // Get connected devices
    QList<QBluetoothAddress> remotes;
    remotes = localDevice.connectedDevices();

    qDebug() << "BT device name on this platform:" << localDevice.address();
  } else {
    qDebug() << "BT does not work on this platform!";
  }

  QQmlApplicationEngine engine;
  const QUrl url(u"qrc:/Test/main.qml"_qs);
  engine.load(url);

  return app.exec();
}

I program buduje się i (wydaje się że) działa (ale już zbudowany MinGW drukuje "qt.bluetooth: Dummy backend running. Qt Bluetooth module is non-functional.").

Edytowano przez Matthew11
  • Lubię! 1
Link do komentarza
Share on other sites

Czy ktoś wie dlaczego nie jestem w stanie połączyć się z hc-05 przez kod examplowy? Mój PC skanuje i wykrywa poprawnie moduł, nie jest natomiast w stanie się z nim połączyć. Rozpoczyna połączenie, ale nigdy nie odbiera sygnału z hc-05, co widać po tym że qDebug nigdy nie dociera do connectionEstablished. Z kolei telefon z androidem robi to bez problemu. Korzystam na PC z zewnętrznego adaptera v5.0. Jakieś rady? Może zły adapter?

Dodam, że mój hc-05 ma zmieniony br z 9600 na 115200 ale to chyba nie powinno mieć wpływu na samą możliwość połączenia tylko na to co wysyłam...

Edytowano przez Snerg
Link do komentarza
Share on other sites

@Matthew11 Czysty kod z przykładu nie jest w stanie się połączyć na Qt w wersji desktopowej. Na androidzie nie próbowałem, moge tylko powiedzieć że sam telefon bez problemu jest w stanie się połączyć z HC-05, a komputer jedynie potrafi znaleźć urządzenie bez możliwości połączenia z nim.

Link do komentarza
Share on other sites

Może PC/laptop nie obsługuje BT SPP. Po stronie komputer to dongiel USB/jakiś wbudowany w lapka? Doczytałem, zewnętrzny 5.0. Upewnij się, że ma SPP i klasyczny BT - znaczy obie te rzeczy muszą być, nie będzie oddzielnie, SPP to nie na BLE oczywiście.

Edytowano przez matsobdev
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.