- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 20

Thema: STM32 programieren mit platformio und mbed

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    Ich habe dann scheinbar das Talent immer die Libs zu finden die nicht gehen oder die Funktionen von denen zu verwenden die nicht richtig gehen.

    So was funktioniert aber zumindest auf dem STM32L475:
    Code:
    #include "mbed.h"
      
    #include <thread>
    #include <atomic>
    #include <chrono>
    #include <iostream>
    #include <string>
    
    int main (int argC, char *argV[])
    {
    // Serielles Terminal initialisieren.
      Serial pc(SERIAL_TX, SERIAL_RX);
      pc.baud(115200);
    
      auto func1 = [] { std::cout << "Hi Alexander" << std::endl; };
      func1 ();
    
      std::string strText1 = "Wie gehts Dir?";
      auto func2 = [&] () { std::cout << strText1 << std::endl; };
      func2 ();
    
    // Das geht noch nicht "this_thread" kennt er nicht: std::this_thread::sleep_for (std::chrono::microseconds (100000));
    
      std::string strText2 = "Gut danke ...";
      auto func3 = [] (std::string& strText) { std::cout << strText << std::endl; };
      func3 (strText2);
    
      return 0;
    }
    Platformio.ini:
    Code:
    [env:disco_l475vg_iot01a]
    platform = ststm32
    board = disco_l475vg_iot01a
    framework = mbed
    upload_protocol = stlink
    
    build_flags = -std=c++17
    picoterm Ausgabe:
    Code:
    picocom v2.2
    
    port is        : /dev/ttyACM0
    flowcontrol    : none
    baudrate is    : 115200
    parity is      : none
    databits are   : 8
    stopbits are   : 1
    escape is      : C-a
    local echo is  : no
    noinit is      : no
    noreset is     : no
    nolock is      : no
    send_cmd is    : sz -vv
    receive_cmd is : rz -vv -E
    imap is        : 
    omap is        : 
    emap is        : crcrlf,delbs,
    
    Type [C-a] [C-h] to see available commands
    
    Terminal ready
    Hi Alexander
                Wie gehts Dir?
                              Gut danke ...
    Wenn ich das richtig sehe kümmert sich hier mbed nur um die Ausgabe auf das serielle Terminal. Leider tun die bei mbed wieder so als wenn die Welt nur Windows hätte und macht zwar den Linefeed aber nicht den Carriage Return. Deshalb sind die Zeilen dann eingerückt. Habe aber leider keine Ahnung was man da bei picocom umstellen muss damit es tut wie Windows bei Zeilenumbruch.

    <Edit>
    Das hat mir gerade jemand geflüstert: picocom /dev/ttyACM0 --imap lfcrlf -b 115200
    So werden die Zeilen richtig untereinander ausgegeben.
    </Edit>
    Geändert von alexander_ro (18.10.2018 um 12:25 Uhr)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    So gehts mit Wlan und Http Client:
    Code:
    #include <iostream>
    
    #include "mbed.h"
    #include "wifi.h"
    /*------------------------------------------------------------------------------
    Hyperterminal settings: 115200 bauds, 8-bit data, no parity
     
    This example 
      - connects to a wifi network (SSID & PWD)
      - displays the IP address and get webpage html code
     
    This example uses SPI3 ( PE_0 PC_10 PC_12 PC_11), wifi_wakeup pin (PB_13), 
    wifi_dataready pin (PE_1), wifi reset pin (PE_8)
    ------------------------------------------------------------------------------*/
    
    #define MBED_CONF_APP_WIFI_SSID     "xyz"
    #define MBED_CONF_APP_WIFI_PASSWORD "geheim" 
    
    Serial pc (SERIAL_TX, SERIAL_RX);
    
    DigitalOut led(LED2);
    AnalogIn adc_temp(ADC_TEMP);
    
    //
    // WLAN mit dem Hotspot verbinden.
    //
    int wifi_sample_run(void)
    {
      uint8_t  IP_Addr[4];
      uint8_t  MAC_Addr[6];
    
    // WLAN initialisieren
      if (WIFI_Init() ==  WIFI_STATUS_OK)
      {
        std::cout << "WiFi initialisieren." << std::endl;
    
        if (WIFI_GetMAC_Address(MAC_Addr) == WIFI_STATUS_OK)
        {
          std::cout << "Wifi Modul MAC Address: ";
          std::cout << unsigned (MAC_Addr[0]) << ":";
          std::cout << unsigned (MAC_Addr[1]) << ":";
          std::cout << unsigned (MAC_Addr[2]) << ":";
          std::cout << unsigned (MAC_Addr[3]) << ":";
          std::cout << unsigned (MAC_Addr[4]) << ":";
          std::cout << unsigned (MAC_Addr[5]) << std::endl;
        }
        else
        {
          std::cout << "ERROR: MAC-Adresse konnte nicht gelesen werden." << std::endl;
        }
    
        if (WIFI_Connect (MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, WIFI_ECN_WPA2_PSK) == WIFI_STATUS_OK)
        {
          std::cout << "WiFi Modul mit Hotspot verbunden." << std::endl;
    
          if(WIFI_GetIP_Address(IP_Addr) == WIFI_STATUS_OK)
          {
            std::cout << "WiFi Modul IP-Adresse: ";
            std::cout << unsigned (IP_Addr[0]) << ".";
            std::cout << unsigned (IP_Addr[1]) << ".";
            std::cout << unsigned (IP_Addr[2]) << ".";
            std::cout << unsigned (IP_Addr[3]) << std::endl;
          }
          else
          {
            std::cout << "ERROR: WiFi Modul IP-Adresse konnte nicht gelesen werden." << std::endl;
            return -1;
          }
        }
        else
        {
          std::cout << "ERROR: WiFi Modul konnte nicht verbunden werden." << std::endl;
          return -1;
        }
      }
      else
      {
        std::cout << "ERROR: WiFi Modul konnte nicht initialisiert werden" << std::endl;
        return -1;
      }
      return 0;
    }
    
    //
    // Sende einen HTTP Get an den Server und lese die Server Antwort.
    //
    void WebClient (void)
    {
    // Parameter zu welchem Server verbunden werden soll.
      uint16_t      iPort      = 80;
      uint16_t      iLocalPort = 3000;
      uint8_t       ipAddr[4]  = { 10, 0, 0, 3 }; // Muss man mit der Server IP ersetzen.
    
    // Mit dem Serve verbinden.
      WIFI_Status_t wifiRc;
      int32_t       Socket = 0;
      wifiRc = WIFI_OpenClientConnection (Socket, WIFI_TCP_PROTOCOL, "Name", ipAddr, iPort, iLocalPort);
    
      if (wifiRc != WIFI_STATUS_OK)
      {
        if (wifiRc == ES_WIFI_STATUS_ERROR)
          std::cout << "Connect zum HTTP-Server Fehler: ES_WIFI_STATUS_ERROR" << std::endl;
    
        std::cout << "Conntect zum HTTP-Server fehlgeschlagen" << std::endl;
        exit (0);
      }
      else
        std::cout << "HTTP-Client Connect erfolgreich ..." << std::endl;
    
    // Sende HTTP Request
      static uint8_t http[1024];
      strcpy ((char *) http, (char *) "GET / HTTP/1.1\r\n");
      strcat ((char *) http, (char *) "Host: domain.de\r\n");
      strcat ((char *) http, (char *) "\r\n");
    
      uint16_t SentDataLength;
      const int wifiWriteTimeout = 10000;
      wifiRc = WIFI_SendData(0, (uint8_t *)http, strlen((char *)http), &SentDataLength, wifiWriteTimeout);
    
      if ((wifiRc == WIFI_STATUS_OK) && (SentDataLength != strlen((char *)http)))
      {
        std::cout << "HTTP Request senden fehlgeschlagen" << std::endl;
        wifiRc = WIFI_STATUS_ERROR;
        exit (0);
      }
      else
        std::cout << "HTTP Request '" << http << "' gesendet: " << SentDataLength << std::endl;
    
    // Empfange Server Antwort
      static uint8_t  resp[1024];
             uint16_t respLen;
      const  int      wifiReadTimeout  = 10000;
      WIFI_ReceiveData (Socket, resp, 1200, &respLen, wifiReadTimeout);
    
      if( respLen > 0)
      {
        std::cout << "HTTP-Client Server Antwort: " << resp << std::endl;
      }
      else
      {
        std::cout << "HTTP-Client: Server Antwort konnte nicht Empfangen werden." << std::endl;
      }
    }
    
    
    int main()
    {
      int ret = 0;
      led = 0;
      pc.baud(115200);
    
      std::cout << "Programm gestartet ..." << std::endl;
    
    // Verbindung zum WLAN Hotspot herstellem
      std::cout << "WLAN: connect" << std::endl;
      ret = wifi_sample_run();
    
      if (ret != 0)
      {
        std::cout << "WLAN: connect fehlgeschlagen" << std::endl;
        return -1;
      }
    
      WebClient ();
    }
    Die platformio Ini ist wie oben angegeben.
    Ich habe dazu das Paket benutzt:
    Code:
    # Lib: DISCO_L475VG_IOT01A_wifi installieren
    # ID : 3438
    pio lib install 3438

Ähnliche Themen

  1. Mbed Mikrocontroller Bibliotheken Header
    Von peterfb im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 11
    Letzter Beitrag: 11.03.2018, 11:21
  2. Arduino Due: FreeRTOS installieren und mit Platformio übersetzen
    Von alexander_ro im Forum Arduino -Plattform
    Antworten: 34
    Letzter Beitrag: 12.11.2017, 11:36
  3. arduino atmega2560 & atom & platformio & ubuntu
    Von inka im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 13.08.2017, 09:26
  4. Antworten: 1
    Letzter Beitrag: 12.06.2015, 14:50
  5. dynamixel rx-24F mit mbed ansteuern
    Von sh4rky im Forum Motoren
    Antworten: 0
    Letzter Beitrag: 05.06.2012, 11:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests