www.elektronik.si
Node MCU in arduino

www.elektronik.si -> Arduino sekcija

Avtor: mosqito PrispevekObjavljeno: Tor Avg 25, 2020 12:11 am    Naslov sporočila:  Node MCU in arduino
----------------------------------------------------------------------------
Uf, na "stara leta" sem se lotil arduino okolja. Nainštaliral sem IDE in dodal "board" ESP8266. Na USB sem nataknil en moj USB/Serial na STM32 in priklopil ESP8266E.

Po osvajanju pojmov "Sketch", "Verify" in "Upload" je nekako zalaufalo.

Prvi primer, ki sem ga zalaufal je, da se mi prižigajo LED preko WEB strani, pred tem pa še poberem točen čas iz IJS NTP strežnika.

Kar zabavno.


Kode ni veliko...

Koda:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>

#include <stdio.h>
#include <time.h>



/* SSID & Pass */
const char* ssid = "***********";  // SSID
const char* password = "********";  // Pass

/** NTP klient */
IPAddress timeServerIP;
const char* ntpServerName = "goodtime.ijs.si";
unsigned int localPort = 2390;

const int NTP_PACKET_SIZE = 48; // rfc5905: NTP odgovore strežnika je v prvih 48 bajtih
byte packetBuffer[ NTP_PACKET_SIZE]; // buffer za NTP UDP paket

// UDP instanca za hendlanje paketkov
WiFiUDP udp;

/** Test NTP sinhronizacije */
void GetTime(void);


// Tole je copy paste enega http server demo, samo da vidim, ce dela
ESP8266WebServer server(80);

uint8_t LED1pin = D7;
bool LED1status = LOW;

uint8_t LED2pin = D6;
bool LED2status = LOW;


void setup() {
  Serial.begin(115200);    // aleluja, kako je to simpl, samo buhnedej da se kaj zastrika (a dela to prek kakega ISR ?)
 
  /** se malo copy / šaste */
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
 
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
 
  server.begin();
  Serial.println("HTTP server started");


  Serial.println("Kurblam UDP");
  udp.begin(localPort);
  Serial.print("UDP lokalni port: ");
  Serial.println(udp.localPort());

  GetTime();  // poslji UDP, pocakaj odgovor, razpakiraj odgovor
}


void loop() {

  /* Tudi tole je copy paste */

  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
 
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}

void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status));
}

void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO7 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status));
}

void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO7 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status));
}

void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO6 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true));
}

void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false));
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>LED Control</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #1abc9c;}\n";
  ptr +=".button-on:active {background-color: #16a085;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<h1>ESP8266 Web Server</h1>\n";
  ptr +="<h3>Using Access Point(AP) Mode</h3>\n";
 
   if(led1stat)
  {ptr +="<p>LED1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">OFF</a>\n";}
  else
  {ptr +="<p>LED1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">ON</a>\n";}

  if(led2stat)
  {ptr +="<p>LED2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">OFF</a>\n";}
  else
  {ptr +="<p>LED2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">ON</a>\n";}

  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}



/**** NTP ... udp   */
// poslji NTP request
void sendNTPpacket(IPAddress& address) {
  Serial.println("posiljam NTP zahtevo...");
  // upam, da tole na arduino dela...
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
 
  // Postavi UDP paket za NTP zahtevo
  // Glej RFC
  packetBuffer[0] = 0xe3;  // 11100011 ... LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 x nula za Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // alo, daj mi pravi cajt....
  udp.beginPacket(address, 123); // NTP zahteva gre na port 123
  udp.write(packetBuffer, NTP_PACKET_SIZE);
  udp.endPacket();
}


/** Pa da vidimo, ce dela */
void GetTime(void)
{
  // kaksen je IP NTP streznika ?
  WiFi.hostByName(ntpServerName, timeServerIP);

  sendNTPpacket(timeServerIP); // UDP handlanje s paketi
  // dajmo mu malo cajta
  delay(1000);

  int cb = udp.parsePacket();
  if (!cb) {
    Serial.println("nic ne bo s pravim cajtom");
  } else {
    Serial.print("Juhu, paket je tu, dolzina=");
    Serial.println(cb);
    // Dajmo se malo to razpakirat, glej RFC
    udp.read(packetBuffer, NTP_PACKET_SIZE);
 
    // timestamp je na offsetu 40, dolzine 4 bajte,

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    // dobimo long integer, ki predstavlja stevilo sekund od 1.1.1900
 
    unsigned long secsSince1900 = highWord << 16 | lowWord;
    Serial.print("Sekund od prejsnjega stoletja: ");
    Serial.println(secsSince1900);

    // dejmo se malo pretvorit:
    Serial.print("Ura je = ");
    // Uporabimo kar ardujino "Unix time", ki se zacne 1.1.1970. Razlika je 2208988800 sekund
    const unsigned long sedemdesetlet = 2208988800UL;
    unsigned long epoch = secsSince1900 - sedemdesetlet;
    // pretvorba UX casa

    struct tm  ts;
    char       buf[80];
    ts = *localtime((time_t *)epoch);
   
    /* to ni implementirano
    strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts); */   
 
    Serial.print("UTC: ");   
    Serial.print((epoch  % 86400L) / 3600);
    Serial.print(':');
    if (((epoch % 3600) / 60) < 10) {
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60);
    Serial.print(':');
    if ((epoch % 60) < 10) {
      Serial.print('0');
    }
    Serial.println(epoch % 60);

   
  }

}


Avtor: mosqito PrispevekObjavljeno: Tor Avg 25, 2020 12:15 am    Naslov sporočila:  
----------------------------------------------------------------------------
Tole se pa izpise....

Koda:
Connecting to SoferjiUnited
..
WiFi connected
IP address:
44.150.168.170
HTTP server started
Kurblam UDP
UDP lokalni port: 2390
posiljam NTP zahtevo...
Juhu, paket je tu, dolzina=48
Sekund od prejsnjega stoletja: 3807295897
Ura je = UTC: 22:11:37



Ujej, bo treba spat.

Avtor: Branez PrispevekObjavljeno: Tor Avg 25, 2020 8:39 am    Naslov sporočila:  
----------------------------------------------------------------------------
Še shema (v Fritzingu) manjka. Saj ne da bi gnjavil vendar, kako naj to preizkusim brez sheme?

Avtor: mosqito PrispevekObjavljeno: Tor Avg 25, 2020 10:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Takole... moraš skombinirat dve shemi. Jaz sem uporabil PSF-A85 modulčke z ESP8266:
https://www.itead.cc/wiki/images/d/dd/PSF-A85_Schmatic.pdf

priklop sem pa dobil po shemi Node MCU razvojne plošče:
https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF


Če ročno šofiraš FLASH/RUN (GPIO0), je dovolj, da priklopiš samo nRST na RTS.

Bom zrisal, ko dodam še par stvari.

Avtor: mosqito PrispevekObjavljeno: Čet Avg 27, 2020 11:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Našel sem zelo zanimivo spletno stran:
https://randomnerdtutorials.com/
Brane, tu je tudi shema, kako pripklopit ESP8266 modul na USB/UART pretvornik.


Testiram tole:
"pritiskom na dugme" na spletni strani, ko jo gosti ESP8266 se pokliče ena spletna stran na enem drugem strežniku, kjer se izvede PHP koda (j.b.g., jave se še nisem navadil, php pa uporabljam že od v.3 dalje). Trenutno se vrednost BME280 senzorja, kii je priključen na ESP8266 vpiše v text datoteko na tistem tavelikem strežniku. Prenos je preko JSON, kasneje bom to še predelal tako, da bo strežnik videl enako zahtevo, kot če bi prišla iz LoRaWAN omrežja. Tako imam potem lahko na voljo enake grafe in obdelavo shranjenih podatkov za LoRa omrežje, kot za WiFi...

Saj verjetno odkrivam toplo vodo, ampak je pa zanimivo.

Avtor: mosqito PrispevekObjavljeno: Ned Avg 30, 2020 12:16 am    Naslov sporočila:  
----------------------------------------------------------------------------
Dodal sem še PWM kontrolo ventilatorjev...
https://www.youtube.com/watch?v=bqiZl8khJRY

Avtor: mosqito PrispevekObjavljeno: Sre Sep 16, 2020 11:42 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Še vedno se malo igram s tem....

na nekem strežniku imam spletno stran za nastavljanje parametrov (namenoma ne želim, da je spletna stran na ESP8266, ker ne želim imeti http dostopa do modula).

Nastavitve iz obrazca (html form) se shranijo v json. Skripta je preprosti php:
Koda:
<!DOCTYPE html>
<html>
<head>
  <title>Nastavitve za ventilacijo.</title>
</head>
<body>
  <form action="action_page.php">
  Nastavitve:<br>
  <label for="time_from">Izberi uro delovanja od:</label>
  <select name="time_from" id="time_from">
    <option value="00:00">00:00</option>
    <option value="00:30">00:30</option>
    <option value="01:00">01:00</option>
    <option value="01:30">01:30</option>
    <option value="02:00">02:00</option>
    <option value="02:30">02:30</option>
    <option value="03:00">03:00</option>
    <option value="03:30">03:30</option>
    <option value="04:00">04:00</option>
    <option value="04:30">04:30</option>
    <option value="05:00">05:00</option>
    <option value="05:30">05:30</option>
    <option value="06:00">06:00</option>
    <option value="06:30">06:30</option>
    <option value="07:00">07:00</option>
    <option value="07:30">07:30</option>
    <option value="08:00">08:00</option>
    <option value="08:30">08:30</option>
    <option value="09:00">09:00</option>
    <option value="09:30">09:30</option>
    <option value="10:00">10:00</option>
    <option value="10:30">10:30</option>
    <option value="11:00">11:00</option>
    <option value="11:30">11:30</option>
    <option value="12:00">12:00</option>
    <option value="12:30">12:30</option>
    <option value="13:00">13:00</option>
    <option value="13:30">13:30</option>
    <option value="14:00">14:00</option>
    <option value="14:30">14:30</option>
    <option value="15:00">15:00</option>
    <option value="15:30">15:30</option>
    <option value="16:00">16:00</option>
    <option value="16:30">16:30</option>
    <option value="17:00">17:00</option>
    <option value="17:30">17:30</option>
    <option value="18:00">18:00</option>
    <option value="18:30">18:30</option>
    <option value="19:00">19:00</option>
    <option value="19:30">19:30</option>
    <option value="20:00">20:00</option>
    <option value="20:30">20:30</option>
    <option value="21:00">21:00</option>
    <option value="21:30">21:30</option>
    <option value="22:00">22:00</option>
    <option value="22:30">22:30</option>
    <option value="23:00">23:00</option>
    <option value="23:30">23:30</option>
  </select>
  <br>
  <label for="time_to">Izberi uro delovanja do:</label>
  <select name="time_to" id="time_to">
    <option value="00:00">00:00</option>
    <option value="00:30">00:30</option>
    <option value="01:00">01:00</option>
    <option value="01:30">01:30</option>
    <option value="02:00">02:00</option>
    <option value="02:30">02:30</option>
    <option value="03:00">03:00</option>
    <option value="03:30">03:30</option>
    <option value="04:00">04:00</option>
    <option value="04:30">04:30</option>
    <option value="05:00">05:00</option>
    <option value="05:30">05:30</option>
    <option value="06:00">06:00</option>
    <option value="06:30">06:30</option>
    <option value="07:00">07:00</option>
    <option value="07:30">07:30</option>
    <option value="08:00">08:00</option>
    <option value="08:30">08:30</option>
    <option value="09:00">09:00</option>
    <option value="09:30">09:30</option>
    <option value="10:00">10:00</option>
    <option value="10:30">10:30</option>
    <option value="11:00">11:00</option>
    <option value="11:30">11:30</option>
    <option value="12:00">12:00</option>
    <option value="12:30">12:30</option>
    <option value="13:00">13:00</option>
    <option value="13:30">13:30</option>
    <option value="14:00">14:00</option>
    <option value="14:30">14:30</option>
    <option value="15:00">15:00</option>
    <option value="15:30">15:30</option>
    <option value="16:00">16:00</option>
    <option value="16:30">16:30</option>
    <option value="17:00">17:00</option>
    <option value="17:30">17:30</option>
    <option value="18:00">18:00</option>
    <option value="18:30">18:30</option>
    <option value="19:00">19:00</option>
    <option value="19:30">19:30</option>
    <option value="20:00">20:00</option>
    <option value="20:30">20:30</option>
    <option value="21:00">21:00</option>
    <option value="21:30">21:30</option>
    <option value="22:00">22:00</option>
    <option value="22:30">22:30</option>
    <option value="23:00">23:00</option>
    <option value="23:30">23:30</option>
  </select>
  <br>

  <label for="ExtMin">Min. temperatura zunaj:</label>
  <input type="range" name="ExtMin" id="ExtMin" value="5" min="-20" max="50" oninput="ExtMinId.value = ExtMin.value">
    <output name="ExtMinOutputName" id="ExtMinId">5</output>
  <br> 
 
  <label for="ExtMax">Max. temperatura zunaj:</label>
  <input type="range" name="ExtMax" id="ExtMax" value="25" min="-20" max="50" oninput="ExtMaxId.value = ExtMax.value">
    <output name="ExtMaxOutputName" id="ExtMaxId">25</output>
  <br>
  <label for="IntMin">Min. temperatura znotraj:</label>
  <input type="range" name="IntMin" id="IntMin" value="5" min="-20" max="50" oninput="IntMinId.value = IntMin.value">
    <output name="IntMinOutputName" id="IntMinId">5</output>
  <br> 

  <label for="IntMax">Max. temperatura znotraj:</label>
  <input type="range" name="IntMax" id="IntMax" value="25" min="-20" max="50" oninput="IntMaxId.value = IntMax.value">
    <output name="IntMaxOutputName" id="IntMaxId">25</output>
 
  <br> 

  <label for="Target">Ciljna temperatura znotraj:</label>
  <input type="range" name="Target" id="Target" value="25" min="15" max="30" oninput="TargetId.value = Target.value">
    <output name="TargetName" id="TargetId">25</output>
 
  <br><br>
  <input type="submit" value="Shrani">
</form>

<p>Klikni na "shrani", da se shranijo nove vrednosti.</p>

</body>
</html>



Tisti "action.php" je potem še pretvorba v json:
Koda:
<?php
$json = json_encode($_GET);
file_put_contents ( "settings.json" , $json );
echo "Json written:<br> ".$json;
?>



Na koncu dobim zapisan json na strežniku...
Koda:
{
    "time_from" : "00:00",
    "time_to"   : "23:30",
    "ExtMin"    : -6,
    "ExtMax"    : -3,
    "IntMin"    : 1,
    "IntMax"    : 11,
    "Target"    : 24
}


Tega potem prebere ESP8266 z uporabo arduinojson in httpclient knjižnice takole:


Koda:
#include <ESP8266HTTPClient.h>
#define REMOTEPARAM_URL "http://tam.nekje/settings.json"

typedef struct {
  time_t time_from;
  time_t time_to;
  float ExtMin;
  float ExtMax;
  float IntMin;
  float IntMax;
  float Target;
} remoteparam_t;
 
void GetRemoteParameters(void);

static remoteparam_t rem_p;

void GetRemoteParameters(void){
  HTTPClient http;

  if (http.begin(REMOTEPARAM_URL)) {  // HTTP
    Serial.print("[HTTP] GET...\n");
    // start connection and send HTTP header
    int httpCode = http.GET();
 
    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTP] GET... code: %d\n", httpCode);
 
      // file found at server
      if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
        String payload = http.getString();
        Serial.println("Raw JSON...");
        Serial.println(payload);
        ParseParams(payload);
      }
    } else {
      Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }
 
    http.end();
  }

}


void ParseParams(String payload) {

  String str;
 
  DynamicJsonDocument doc(2048);
 
  deserializeJson(doc, payload);
  str = doc["time_from"].as<String>();
  // todo convert to time_t
  //time_from = makeTime(str);
  str = doc["time_to"].as<String>();
  // todo convert to time_t
  //time_to = makeTime(str);

  str = doc["ExtMin"].as<String>();
  rem_p.ExtMin = str.toFloat();
 
  str = doc["ExtMax"].as<String>();
  rem_p.ExtMax = str.toFloat();

  str = doc["IntMin"].as<String>();
  rem_p.IntMin = str.toFloat();
 
  str = doc["IntMax"].as<String>();
  rem_p.IntMax = str.toFloat();
 
  str = doc["Target"].as<String>();
  rem_p.Target = str.toFloat();
 
  Serial.println(doc["time_from"].as<String>());
  Serial.println(doc["time_to"].as<String>()); 
  Serial.println(rem_p.ExtMin);
  Serial.println(rem_p.ExtMax);
  Serial.println(rem_p.IntMin);
  Serial.println(rem_p.IntMax);
  Serial.println(rem_p.Target);
 
}



Pa še kontrolni izpis:

Koda:
Time is in sync
[HTTP] GET...
[HTTP] GET... code: 200
Raw JSON...
{"time_from":"00:00","time_to":"23:30","ExtMin":"-6","ExtMax":"-2","IntMin":"2","IntMax":"13","Target":"25"}
00:00
23:30
-6.00
-2.00
2.00
13.00
25.00

Avtor: Branez PrispevekObjavljeno: Sre Sep 16, 2020 11:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mosqito je napisal/a:
Našel sem zelo zanimivo spletno stran:
https://randomnerdtutorials.com/
Brane, tu je tudi shema, kako pripklopit ESP8266 modul na USB/UART pretvornik.
...
Kaj pa misliš od kod jaz črpam...

Avtor: SilvoKraj: Koroška-okolica Dravograda PrispevekObjavljeno: Čet Sep 17, 2020 5:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tudi sam sem spet po kakih 4 letih zagnal ESP. Sam ne delam pa v arduio okolju.
Firmware sem generiral tukaj. Programiram v lua okolju.
Imel sem kaj nekaj težav z firmwarom. Firmware, ki sem ga generiral pred 4-mi leti je deloval normalno. Ker sem potreboval en dodaten modul sem generiral novega. Na temu ni hotel delati web server. Po x neuspelih poizkusih sem generiral firmware kot 1.5.4.1-final (frozen, for 512KB flash) ta deluje brez problema (prej sem ga generiral kot master oz. dev) Tak je bil tudi tisti iz pred 4-jih let.

Avtor: mosqito PrispevekObjavljeno: Čet Sep 24, 2020 11:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Arduino IDE je živ obup. Čisto neuporabno. Ni code completion, ne da se nič lepo urediti po enih minimalnih standardih programiranja. Uporaben je le za copy/paste neke source code iz interneta, kaj več pa ne.

Kljub vsem mukam sem se nekaj časa trudil, da bi uspel ugotoviti, od kod tako zanič IDE toliko pozornosti in kako to, da je stvar tako razširjena. Hm, enostavno nisem ugotovil. "Prešaltal" sem na Visual studio code in nainštrliral platformIO. Zadaj je še vedno "arduino" prevajanje, knjižnice itd... IDE je seveda normalno uporaben (VS code uporabljam že od prej, npr. za remote programiranje malinc). Edino, kar še pogrešam je GDB ali kak drug debuger namesto izpisovanja na serijski port. V glavnem - uporabno Smile

Avtor: Branez PrispevekObjavljeno: Pet Sep 25, 2020 8:01 am    Naslov sporočila:  
----------------------------------------------------------------------------
mosqito je napisal/a:
...
Kljub vsem mukam sem se nekaj časa trudil, da bi uspel ugotoviti, od kod tako zanič IDE toliko pozornosti in kako to, da je stvar tako razširjena. Hm, enostavno nisem ugotovil. ...
Saj si si sam odgovoril na to vprašanje.
mosqito je napisal/a:
...
Uporaben je le za copy/paste neke source code iz interneta, kaj več pa ne.
...
Kaj več pa "Arduinaši" ne počnemo.

Avtor: dumr666Kraj: Ljubljana PrispevekObjavljeno: Tor Okt 20, 2020 4:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Načeloma če želiš res dober IDE za Arduino, je najboljša opcija po mojem mnenju, VS Code ter Platformio dodaten (extension). Maš pokrito od knjižnic, do boardov, do primerov.

Stran 1 od 1

Powered by phpBB © 2001,2002 phpBB Group