Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:5738799d7a56
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Oct 28 07:42:46 2020 +0000
@@ -0,0 +1,277 @@
+/* WiFi Example
+ * Copyright (c) 2018 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed.h"
+#include "TCPSocket.h"
+#include <DigitalIn.h>
+
+#define WIFI_IDW0XX1 2
+
+#define TS_DEVICE "StmWifi" //mettre le nom de votre canal TS
+#define thingspeak_APIkey_write "SOSW9VB0YR0D0GF8" //mettre la clé d'écriture de votre canal TS
+#define thingspeak_APIkey_read "YEBSWYV532L13T23" //mettre la clé lecture de votre canal TS
+
+
+#if (defined(TARGET_DISCO_L475VG_IOT01A) || defined(TARGET_DISCO_F413ZH))
+#include "ISM43362Interface.h"
+
+ISM43362Interface wifi(MBED_CONF_APP_WIFI_SPI_MOSI, MBED_CONF_APP_WIFI_SPI_MISO, MBED_CONF_APP_WIFI_SPI_SCLK, MBED_CONF_APP_WIFI_SPI_NSS, MBED_CONF_APP_WIFI_RESET, MBED_CONF_APP_WIFI_DATAREADY, MBED_CONF_APP_WIFI_WAKEUP, false);
+
+#else // External WiFi modules
+
+#if MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1
+#include "SpwfSAInterface.h"
+SpwfSAInterface wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX);
+#endif // MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1
+
+#endif
+char hostName[] = "8406e1ca8b3e.ngrok.io";
+char cardId[] = "carte_9";
+char sensorId[256];
+DigitalIn sensorIn(D8);
+
+int sensorState = 0;
+const char *sec2str(nsapi_security_t sec)
+{
+ switch (sec) {
+ case NSAPI_SECURITY_NONE:
+ return "None";
+ case NSAPI_SECURITY_WEP:
+ return "WEP";
+ case NSAPI_SECURITY_WPA:
+ return "WPA";
+ case NSAPI_SECURITY_WPA2:
+ return "WPA2";
+ case NSAPI_SECURITY_WPA_WPA2:
+ return "WPA/WPA2";
+ case NSAPI_SECURITY_UNKNOWN:
+ default:
+ return "Unknown";
+ }
+}
+
+int scan_wifi(WiFiInterface *wifi)
+{
+ WiFiAccessPoint *ap;
+
+ printf("Scan:\n");
+
+ int count = wifi->scan(NULL,0);
+ printf("%d networks available.\n", count);
+
+ /* Limit number of network arbitrary to 15 */
+ count = count < 15 ? count : 15;
+
+ ap = new WiFiAccessPoint[count];
+ count = wifi->scan(ap, count);
+ for (int i = 0; i < count; i++)
+ {
+ printf("Network: %s secured: %s BSSID: %hhX:%hhX:%hhX:%hhx:%hhx:%hhx RSSI: %hhd Ch: %hhd\n", ap[i].get_ssid(),
+ sec2str(ap[i].get_security()), ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2],
+ ap[i].get_bssid()[3], ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel());
+ }
+
+ delete[] ap;
+ return count;
+}
+void http_demo(NetworkInterface *net)
+{
+ TCPSocket socket;
+ nsapi_error_t response;
+
+ printf("Sending HTTP request to ngrok.io...\n");
+
+ // Open a socket on the network interface, and create a TCP connection to www.arm.com
+ socket.open(net);
+ response = socket.connect(hostName, 80);
+ if(0 != response) {
+ printf("Error connecting: %d\n", response);
+ socket.close();
+ return;
+ }
+
+ // Send a simple http request
+ char sbuffer[256];
+ sprintf(sbuffer, "GET /api/v1/sensor/identify HTTP/1.1\r\nHost: %s\r\n\r\n", hostName);
+ nsapi_size_t size = strlen(sbuffer);
+ response = 0;
+ while(size)
+ {
+ response = socket.send(sbuffer+response, size);
+ if (response < 0) {
+ printf("Error sending data: %d\n", response);
+ socket.close();
+ return;
+ } else {
+ size -= response;
+ // Check if entire message was sent or not
+ printf("sent %d [%.*s]\n", response, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+ }
+ }
+
+ // Recieve a simple http response and print out the response line
+ char rbuffer[64];
+ response = socket.recv(rbuffer, sizeof rbuffer);
+ if (response < 0) {
+ printf("Error receiving data: %d\n", response);
+ } else {
+ printf("recv %d [%.*s]\n", response, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
+ }
+
+ // Close the socket to return its memory and bring down the network interface
+ socket.close();
+}
+void authentificate(NetworkInterface *net){
+ TCPSocket socket;
+ nsapi_error_t response;
+
+ printf("Sending HTTP request to host...\n");
+
+ // Open a socket on the network interface, and create a TCP connection to www.arm.com
+ socket.open(net);
+ response = socket.connect(hostName, 80);
+ if(0 != response) {
+ printf("Error connecting: %d\n", response);
+ socket.close();
+ return;
+ }
+
+ // Send a simple http request
+ char sbuffer[256];
+ sprintf(sbuffer, "GET /api/v1/sensor/identify?sensorId=%s HTTP/1.1\r\nHost: %s\r\n\r\n", cardId,hostName);
+ nsapi_size_t size = strlen(sbuffer);
+ response = 0;
+ while(size)
+ {
+ response = socket.send(sbuffer+response, size);
+ if (response < 0) {
+ printf("Error sending data: %d\n", response);
+ socket.close();
+ return;
+ } else {
+ size -= response;
+ // Check if entire message was sent or not
+ printf("sent %d [%.*s]\n", response, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+ }
+ }
+
+ // Recieve a simple http response and print out the response line
+ char rbuffer[64];
+ response = socket.recv(rbuffer, sizeof rbuffer);
+ if (response < 0) {
+ printf("Error receiving data: %d\n", response);
+ } else {
+ printf("recv %d [%.*s]\n", response, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
+ }
+
+ // Close the socket to return its memory and bring down the network interface
+ socket.close();
+}
+void updateStatus(NetworkInterface *net){
+ TCPSocket socket;
+ nsapi_error_t response;
+
+ printf("Sending HTTP request to ngrok.io...\n");
+
+ // Open a socket on the network interface, and create a TCP connection to www.arm.com
+ socket.open(net);
+ response = socket.connect(hostName, 80);
+ if(0 != response) {
+ printf("Error connecting: %d\n", response);
+ socket.close();
+ return;
+ }
+
+ // Send a simple http request
+ char sbuffer[256];
+ if(!sensorState){
+ sprintf(sbuffer, "GET /api/v1/sensor/update?sensorId=%s&state=1 HTTP/1.1\r\nHost: %s\r\n\r\n", cardId, hostName);
+ } else {
+ sprintf(sbuffer, "GET /api/v1/sensor/update?sensorId=%s&state= HTTP/1.1\r\nHost: %s\r\n\r\n", cardId , hostName);
+
+ }
+ // sprintf(sbuffer, "GET /api/v1/sensor/update?sensorId=%s&state=%d HTTP/1.1\r\nHost: %s\r\n\r\n", cardId, sensorState, hostName);
+ nsapi_size_t size = strlen(sbuffer);
+ response = 0;
+ while(size)
+ {
+ response = socket.send(sbuffer+response, size);
+ if (response < 0) {
+ printf("Error sending data: %d\n", response);
+ socket.close();
+ return;
+ } else {
+ size -= response;
+ // Check if entire message was sent or not
+ printf("sent %d [%.*s]\n", response, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
+ }
+ }
+
+ // Recieve a simple http response and print out the response line
+ char rbuffer[64];
+ response = socket.recv(rbuffer, sizeof rbuffer);
+ if (response < 0) {
+ printf("Error receiving data: %d\n", response);
+ } else {
+ printf("recv %d [%.*s]\n", response, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
+ }
+
+ // Close the socket to return its memory and bring down the network interface
+ socket.close();
+}
+
+int main()
+{
+ int previousState;
+ int count = 0;
+
+ printf("WiFi connect attempt\n\n");
+ count = scan_wifi(&wifi);
+ if (count == 0) {
+ printf("No WIFI APNs found - can't continue further.\n");
+ //return -1;
+ }
+
+
+ printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
+ int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
+ if (ret != 0) {
+ printf("\nConnection error\n");
+ return -1;
+ }
+ printf("Success\n\n");
+ printf("MAC: %s\n", wifi.get_mac_address());
+ printf("IP: %s\n", wifi.get_ip_address());
+ printf("Netmask: %s\n", wifi.get_netmask());
+ printf("Gateway: %s\n", wifi.get_gateway());
+ printf("RSSI: %d\n\n", wifi.get_rssi());
+
+ http_demo(&wifi);
+ authentificate(&wifi);
+ sensorState = sensorIn.read();
+ updateStatus(&wifi);
+ while(true){
+ previousState = sensorState;
+ sensorState = sensorIn.read();
+ if(previousState != sensorState){
+ printf("Sensor = %d\n",sensorState);
+ updateStatus(&wifi);
+ }
+ // wait(1.0);
+ //printf("Sensor %s", digitalRead(9));
+ }
+ wifi.disconnect();
+}
\ No newline at end of file