Arduino MKR GSM 1400 Veilig Koppelen aan Google Cloud IoT Core: Stap-voor-Stap Handleiding
Onderdelen en benodigdheden
| Arduino MKR GSM 1400 | 1 |
| Micro-USB naar USB Kabel (Generiek) | 1 |
| 3.7V Lipo Batterij | 1 |
| Micro SIM-kaart | 1 |
| Cellulaire UF.L Antenne | 1 |
Apps en online diensten
- Arduino IDE
- Google Cloud IoT Core
Over dit project
Let op: Deze tutorial kan verouderd zijn, ga hier voor een actueelere versie.
Inleiding
Apparaten kunnen verbinden met GCP IoT Core via HTTP of MQTT. Deze tutorial leidt u door het proces om een Arduino MKR GSM 1400 bord veilig te verbinden met GCP IoT Core met behulp van een MQTT-client. MQTT (Message Queuing Telemetry Transport) is een M2M (machine-to-machine) connectiviteitsprotocol dat een messaging-abonnement en publiceertransport biedt.
Apparaten moeten JSON Web Tokens (JWTs) gebruiken voor authenticatie, meer informatie over JWTs vindt u in RFC 7519. GCP IoT Core ondersteunt zowel RSA als Elliptic Curve algoritmen om JSON Web Signatures (JWS) te verifiëren. Meer informatie over JWS vindt u in RFC 7515.
Elk Arduino MKR-bord met on-board connectiviteit, inclusief de MKR GSM 1400, is uitgerust met een Microchip ATECC508A of ATECC608A crypto-element. Dit crypto-element kan worden gebruikt om veilig een 256-bit ECC (Elliptic Curve Cryptography) sleutel te genereren en op te slaan. We zullen een privésleutel die opgeslagen is in het crypto-element gebruiken om de JWT te tekenen.
Software- en Hardware-instelling
Als u de Arduino IDE niet op uw computer heeft geïnstalleerd, download en installeer deze.
Zodra het geïnstalleerd is, zorg ervoor dat u het laatste "Arduino SAMD Boards"-pakket heeft geïnstalleerd. U kunt dit controleren door de Arduino IDE te openen, en het menu Tools → Board: "..." → Board Manager... te openen, en te zoeken naar "Arduino SAMD". Op het moment van schrijven was 1.6.20 de nieuwste versie.

Vervolgens moet u de Arduino-bibliotheken installeren die gebruikt zullen worden, via de bibliotheekbeheerder van de Arduino IDE. Open het menu Sketch → Include Library → Manage Libraries..., zoek en installeer elk van de volgende bibliotheken afzonderlijk:
- MKRGSM
- Arduino_JSON
- ArduinoECCX08 (versie 1.3.0 of later)
- ArduinoMqttClient (versie 0.1.3 of later)
- Arduino Cloud Provider Examples (versie 1.2.0 of later)
Plaats nu de micro SIM-kaart in de sleuf aan de onderkant van het MKR GSM 1400-bord, sluit de antenne aan, en bevestig de 3.7V Lipo-batterij aan de JST-connector. Plug vervolgens de MKR GSM 1400 in met de micro-USB-kabel aan uw computer, selecteer de seriële poort in de Arduino IDE via het menu Tools → Port "..." en selecteer ook Arduino MKR GSM 1400 in het menu Tools → Board "...".

Configureren en toevoegen van het bord aan GCP IoT Core
Zoals hierboven vermeld, vereist GCP IoT Core dat apparaten die verbinden via het MQTT-protocol JWT gebruiken voor authenticatie. We zullen een sketch gebruiken om een privésleutel en publieke sleutel op het bord te genereren, en vervolgens de PEM-waarde van de publieke sleutel toevoegen aan de GCP IoT Core-console.
De privésleutel en publieke sleutel kunnen worden gegenereerd met een voorbeeldsketch uit de ArduinoECCX08-bibliotheek. Open de sketch in de Arduino IDE via File → Examples → ArduinoECCX08 → Tools → ECCX08JWSPublicKey. Klik op de knop "Upload" om de sketch te bouwen en naar uw bord te uploaden, en open vervolgens de Seriële Monitor. Zorg ervoor dat de regel-einde-configuratie ingesteld staat op "Both NL & CR."
Deze sketch zal u vragen om uw ATECC508A of ATECC608A crypto-element permanent te configureren als dit nog niet geconfigureerd en vergrendeld is. LET OP: Dit vergrendelingsproces is permanent en onomkeerbaar, maar is nodig om het crypto-element te gebruiken - de configuratie die de sketch instelt, stelt u in staat om 5 privésleutel-slots te gebruiken met elke cloud-provider (of server) en een privésleutel kan op elk moment opnieuw worden gegenereerd voor elk van de 5 privésleutel-slots (0 - 4). Wanneer het bord de fabriek verlaat, bevindt het crypto-element zich in een niet-geconfigureerde en ontgrendelde staat.
Hierna wordt u gevraagd welk slot u wilt gebruiken. Voor deze tutorial gebruiken we slot 0 om de privésleutel te genereren en op te slaan die gebruikt wordt voor een publieke sleutel (slots 1 tot 4 kunnen worden gebruikt om extra privésleutels te genereren en op te slaan indien nodig). Opmerking: Omdat de privésleutel binnen het crypto-element wordt gegenereerd, verlaat deze het apparaat nooit en wordt deze veilig opgeslagen en kan niet worden uitgelezen.

Kopieer de gegenereerde publieke sleutelwaarde, in deze screenshot is de waarde:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFl4+DXufU84AhDGib7aMwmYwUVAp9coRdC9jOdzR
e2kqGWFEb+QP4V4YUK9Zy7PsmRABi1sWgxiAoEhg1FEQgg==
-----END PUBLIC KEY-----
We zullen deze in een latere stap gebruiken bij het toevoegen van het apparaat aan GCP IoT Core.
Nu we een PEM-publieke sleutel hebben, moeten we inloggen in de GCP IoT Core-console en een nieuw apparaat aanmaken.
- Open een webbrowser en ga naar https://cloud.google.com/ en klik op de link "Sign In" om in te loggen met uw Google ID.
- Zodra u bent ingelogd, klik op de knop "GO TO CONSOLE". Vervolgens ziet u het hoofddashboard.
- Klik op de link "CREATE" om een nieuw project aan te maken.
- U wordt gevraagd om een projectnaam, we gebruiken "MKR GCP Tutorial" als naam. Klik op de knop "CREATE" om door te gaan.
- Nadat het project is aangemaakt, krijgt u een dashboardweergave te zien.
- Klik nu op het menu-icoon linksboven, scroll naar de kop "BIG DATA" en klik op de link "IoT Core".
- U wordt gevraagd de API in te schakelen, klik op de knop "Enable API".
- Zodra de API is ingeschakeld, wordt u gevraagd een apparaatregister aan te maken. Klik op de knop "Create a device registry" om door te gaan.
- U krijgt dan een formulier te zien. Vul de "Registry ID" in, selecteer een regio. In de onderstaande screenshot werd "MKR_GCP_Tutorial" ingevuld voor de registry ID en "us-central1" geselecteerd als regio. Na het invullen van het formulier, klik op de knop "Create".
- U krijgt dan de details van het register te zien.
- Om een nieuw apparaat toe te voegen, klik op de link "Devices" in de navigatiebalk aan de linkerkant.
- Klik vervolgens op "+ CREATE A DEVICE" in de kop bovenaan de pagina.
- Voer de apparaatnaam in, in de onderstaande screenshot werd "MyMKRGSM1400" gebruikt. "ES256" moet geselecteerd zijn als "Public key format". Plak de PEM-publieke sleutel die eerder op het bord is gegenereerd in het tekstvak "Public key value". Klik vervolgens op de knop "Create".













Het bord verbinden met GCP IoT Core
- Open de GCP IoT Core GSM-sketch in de Arduino IDE via File → Examples → Arduino Cloud Provider Examples → GoogleCloudPlatformIoTCore → GCP_IoT_Core_GSM.
- In het tabblad
arduino_secrets.h, vul de pin (indien vereist) voor de SIM-kaart in, evenals de GPRS APN, gebruikersnaam en wachtwoord voor de cellulaire provider die u gebruikt.
// GSM instellingen
#define SECRET_PINNUMBER ""
#define SECRET_GPRS_APN "GPRS_APN" // vervang door uw GPRS APN
#define SECRET_GPRS_LOGIN "login" // vervang door uw GPRS login
#define SECRET_GPRS_PASSWORD "password" // vervang door uw GPRS wachtwoord
- Werk vervolgens de project-id, cloud-regio, register-id en apparaat-id waarden bij.
// Vul uw Google Cloud Platform - IoT Core info in
#define SECRET_PROJECT_ID ""
#define SECRET_CLOUD_REGION ""
#define SECRET_REGISTRY_ID ""
#define SECRET_DEVICE_ID ""
De project-id waarde kan worden gevonden door op de menubalk bovenin de GCP-console te klikken. Voor de bovenstaande stappen zijn de waarden:
#define SECRET_PROJECT_ID "mkr-gcp-tutorial"
#define SECRET_CLOUD_REGION "us-central1"
#define SECRET_REGISTRY_ID "MKR_GCP_Tutorial"
#define SECRET_DEVICE_ID "MyMKRGSM1400"
- Upload de sketch naar uw bord en open de seriële monitor. Het bord zal proberen verbinding te maken met het cellulaire netwerk en, als dat succesvol is, proberen te verbinden met GCP IoT Core via MQTT.

Interactie met het bord op GCP IoT Core
Nu uw bord met succes verbonden is met GCP IoT Core, kunnen we de GCP IoT Core-console gebruiken om ermee te interacteren. De sketch stuurt elk 5 seconden een bericht naar het /devices/{deviceId}/state-onderwerp en luistert naar berichten op zowel het /devices/{deviceId}/config-onderwerp als het /devices/{deviceId}/commands/#-onderwerpen.
Klik op de apparaatpagina in de GCP IoT Core-console op de knop "SEND COMMAND".

Een modaal venster verschijnt, waar u een bericht kunt invoeren om te verzenden. In de onderstaande screenshot werd "Hello There!" ingevoerd. Klik op de knop "SEND COMMAND" om het bericht te verzenden.

Zodra het bord het bericht ontvangt, print het dit op de Seriële Monitor.

Om de berichten te bekijken die het bord verstuurt, klik op het tabblad "Configuration & state history".

De berichten verschijnen in Base64-gecodeerde indeling. Om de waarde te bekijken, klik op een item in de lijst en selecteer de radioknop "Text".

In de bovenstaande screenshot stuurde het bord een "hello 464488" waarde, de 464488-waarde is het resultaat van de millis()-functie op het bord.
Conclusie
In deze tutorial hebben we behandeld hoe u een Arduino MKR GSM 1400-bord veilig kunt gebruiken met GCP IoT Core. Een ondertekende JWT werd gebruikt om te authenticeren bij GCP IoT Core met behulp van het MQTT-protocol, met de ATECC508A of ATECC608A die de privésleutel opslaat die gebruikt wordt om de JWT te tekenen. MQTT-berichten werden heen en weer gestuurd naar en van het bord.
Dit is slechts het begin, u kunt GCP IoT Core gebruiken met veel van de andere diensten die GCP biedt!
Code
Github
Productieproces
- Raspberry Pi 3 verbinden met DHT11-sensor en data uploaden naar ThingsIo.ai-cloud
- Nauwkeurige Temperatuur- & Vochtigheidsmonitoring met SHT15 op Windows 10 IoT Core
- Windows 10 IoT Core Installeren op Raspberry Pi 3 Model B+: Stap-voor-stap Handleiding
- Bouw een Spraak-gecontroleerde Robot met Windows 10 IoT Core op Raspberry Pi 2
- Debuggen van het Arduino Portenta H7 Dual-Core-systeem met Segger J-Link
- Arduino Mega: Foto's Maken en Automatisch Uploaden naar Google Drive
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Bouw een Sensor Toren met Arduino Cloud: Temperatuur, Beweging & Gas Monitoring
- Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring
- ADLINK & Google Cloud collaboreren voor naadloze IoT-oplossingen
- IoT-gateways onder de knie krijgen: apparaten naadloos met de cloud verbinden