- Milyen notebookot vegyek?
- SSD kibeszélő
- Minden USB-C kábel egyforma? Hát NEM. És ez a baj. – Tech Percek #7
- AMD Navi Radeon™ RX 9xxx sorozat
- Autós kamerák
- Milyen alaplapot vegyek?
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- NVIDIA GeForce RTX 5060 Ti (GB206)
- Milyen egeret válasszak?
- SONY LCD és LED TV-k
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
-
ngabor2
nagyúr
Szolgálati közlemény!
Úgy tapasztalom, hogy a topik egyre gyakrabban kezd elkanyarodni a címtől, ami nem probléma, inkább a technikai fejlődést követi. Ezért új címjavaslatokat várnék, mire lehetne átnevezni, hogy a kereső megtalálja, ha valaki a témában keres. Az Arduino az mindenképp benne maradna, de kiegészíteném az ESP8266/ESP12/ESP32 résszel. De milyen összefoglaló, könnyen idevezető nevet lehetne adni ezeknek?
Várom és köszönöm a címjavaslatokat.
-
vargalex
félisten
válasz
fecske13 #7382 üzenetére
Szia!
Szóval, a kód:
//AP definitions
ADC_MODE(ADC_VCC);
struct {
uint32 lastTime;
int cnt;
float temperatures[MAXRTCDATACOUNT];
float battery[MAXRTCDATACOUNT];
} rtcData;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONEWIRE_GPIO);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// device addresses
DeviceAddress DSAddress;
// device address in char array
static char DSAddressStr[18];
static char *hex = "0123456789ABCDEF";
int deviceCnt;
char *ap_ssid = NULL;
char *ap_password;
HTTPClient http;
boolean setSNTPTime(char *NTPServer) {
unsigned long entry=millis();
configTime(0,0,NTPServer);
while (millis()-entry<5000 && time(NULL)<3600) {
delay(500);
}
if (time(NULL)>100) return true;
else return false;
}
void scanWifi() {
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Scanning for wireless networks");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
ap_ssid = NULL;
for (int i = 0; i < n; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
if (WiFi.SSID(i) == FIRST_SSID) {
ap_ssid = FIRST_SSID;
ap_password = FIRST_PASSWORD;
}
if (WiFi.SSID(i) == SECOND_SSID) {
ap_ssid = SECOND_SSID;
ap_password = SECOND_PASSWORD;
}
}
}
if ( ap_ssid == NULL) {
Serial.println("Defined SSID-s not found. Resetting.");
ESP.restart();
}
Serial.println("");
}
void connect() {
// Connecting to Wifi.
Serial.println();
if (WiFi.SSID() == "") {
// Never connected, scanning for wireless networks
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
}
else {
Serial.print("Connecting to ");
Serial.println(WiFi.SSID());
}
unsigned long wifiConnectStart = millis();
while (WiFi.status() != WL_CONNECTED) {
// Check to see if
if (WiFi.status() == WL_CONNECT_FAILED) {
Serial.println("Failed to connect to WiFi. Please verify credentials: ");
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
ESP.restart();
}
delay(500);
Serial.print(".");
// Only try for 5 seconds.
if (millis() - wifiConnectStart > 15000) {
Serial.println("Failed to connect to WiFi");
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
ESP.restart();
}
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
// function to return device address as a String
String deviceAddressToStr(DeviceAddress deviceAddress)
{
String ret = "";
for (uint8_t i = 0; i < 8; i++)
{
// zero pad the address if necessary
ret = ret + hex[DSAddress[i] / 16];
ret = ret + hex[DSAddress[i] & 15];
}
return ret;
}
// getting temperature from DS18B20 sensor
float getTemperature() {
float tempC = 150;
// Start up the library
sensors.begin();
if (!sensors.getAddress(DSAddress, 0)) {
Serial.println("Unable to find address for Device 0");
}
else {
// set the resolution
sensors.setResolution(DSAddress, TEMPERATURE_PRECISION);
sensors.requestTemperatures();
tempC = sensors.getTempC(DSAddress);
Serial.print("Temp C for device ");
Serial.print(deviceAddressToStr(DSAddress));
Serial.print(" ");
Serial.println(tempC, 4);
}
return tempC;
}
// POST data as JSON to the server
bool sendData(DeviceAddress dsAddress) {
bool ret;
int i;
String postStr = "{\"sensorAddress\": \"" + deviceAddressToStr(dsAddress) + "\", \"values\": [";
for (i=0; i<rtcData.cnt; i++) {
if (i>0) {
postStr += ",";
}
postStr += "{\"offset\":\"" + String(i-rtcData.cnt+1) + "\", \"temperature\":\"" + String(rtcData.temperatures[i], 3) + "\", \"voltage\":\"" + String(rtcData.battery[i]) +"\"}";
}
postStr += "]}";
if (http.begin(UPDATEURL)) {
Serial.print("Post string: ");
Serial.println(postStr);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(postStr);
Serial.print("HTTP POST return code: ");
Serial.println(httpCode); //Print HTTP return code
if (httpCode>0) {
ret = true;
}
else {
Serial.print("[HTTP] POST... failed, error: ");
Serial.println(http.errorToString(httpCode).c_str());
ret = false;
}
http.end();
}
else {
ret = false;
}
return ret;
}
void setup() {
unsigned long startTime = 0;
Serial.begin(115200);
// Wait for serial to initialize.
while (!Serial) { }
Serial.println("");
Serial.println("Dallas Temperature Sensor Control and post data to server (deep sleep version with RTC memory)");
Serial.print("Reset reason: ");
Serial.println(ESP.getResetReason());
if (ESP.getResetReason() != "Deep-Sleep Wake") {
Serial.println("Non deep-sleep wake. Clearing RTC data storage.");
rtcData.cnt = 0;
rtcData.lastTime = 0;
ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData));
scanWifi();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ap_ssid);
WiFi.begin(ap_ssid, ap_password);
startTime = micros();
}
if (ESP.rtcUserMemoryRead(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
float temp = getTemperature();
rtcData.cnt++;
rtcData.temperatures[rtcData.cnt-1] = temp;
rtcData.battery[rtcData.cnt-1] = ESP.getVcc() * VCC_ADJUST;
Serial.print("CNT: ");
Serial.println(rtcData.cnt);
if (rtcData.cnt>=MINPOSTCOUNT) {
connect();
Serial.print("Setting NTP time with server ");
Serial.print(NTPSERVER);
while (!setSNTPTime(NTPSERVER)) Serial.print(".");
Serial.println("");
uint32 seconds = time(NULL);
if (seconds != 0) {
Serial.print("seconds: ");
Serial.println(seconds);
Serial.print("rtcData.lastTime: ");
Serial.println(rtcData.lastTime);
uint32 waitSecs;
if (rtcData.lastTime == 0 || rtcData.lastTime+rtcData.cnt*REPORT_INTERVAL< seconds) {
waitSecs = 0;
}
else {
waitSecs = (rtcData.lastTime+rtcData.cnt*REPORT_INTERVAL) - seconds;
}
Serial.print("Waiting ");
Serial.print(waitSecs);
Serial.println(" seconds before posting data");
delay(1000*waitSecs);
seconds = time(NULL);
startTime = micros();
if (sendData(DSAddress)) {
Serial.print("sendData returned true, setting cnt to 0 and lastTime to ");
Serial.println(seconds);
rtcData.cnt=0;
rtcData.lastTime = seconds;
}
}
else {
Serial.println("time function returned 0");
}
}
ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData));
}
else {
Serial.println("RTC Memory read failed");
}
Serial.print("startTime: ");
Serial.print(startTime);
Serial.println(" microseconds");
Serial.print("Entering to deep sleep for ");
if (rtcData.cnt+1<MINPOSTCOUNT) {
Serial.print((REPORT_INTERVAL*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION);
Serial.print(" microseconds and waking up with ");
Serial.println("wifi disabled");
ESP.deepSleep((REPORT_INTERVAL*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION, WAKE_RF_DISABLED);
}
else {
Serial.print(((REPORT_INTERVAL-10)*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION);
Serial.print(" microseconds and waking up with ");
Serial.println("wifi on");
ESP.deepSleep(((REPORT_INTERVAL-10)*1000*1000-(micros()-startTime))*INTERVAL_CORRECTION, WAKE_RF_DEFAULT); //WAKE_NO_RFCAL);
}
}
void loop() {
// put your main code here, to run repeatedly:
}A lényege: kb. percenként méri a hőmérsékletet és a VCC-t, ezeket tárolja RTC User memóriába. A MINPOSTCOUNT-ban meghatározott ébresztés valamivel korábban történik, hogy NTP-n időt szinkronizáljon, így a POST pontosan 10 percenként tud megtörténni (sajnos a deep sleep időmérése valamiért nem túl pontos). A szervernek JSON-ban küldi az adatokat (sensor address, majd a hőmérséklet/feszültség és offset (aktuális időpillanathoz képest időeltolás percben).
2 SSID-t és hozzá tartozó jelszavakat definiáltam, mivel 2 helyszínen szeretnék ledobni ilyen szenzorokat. Így a wifi scan-ból tudja majd a kód, hogy melyik látható a 2 közül és ahhoz csatlakozik.
A percenkénti méréshez wifi bekapcsolása nélkül ébresztem az ESP8266-ot, így kisebb a fogyasztása és néhány ms alatt végez is a méréssel, tárolással. Minden 10. mérésnél (vagy ha valamiért nem tudta POST-olni az adatokat, akkor minden következő mérésnél) wifi bekapcsolásával ébred a korábban említett rövidebb sleep után, csatlakozik a wifi-hez, NTP-n szinkronizál, POST-ol és elrakja RTC memóriába a POST idejét. A következő POST-kor ehhez képest történik a várakozás.Képet most nem készítettem az eszközről, de nekem az ESP8266-ok (ESP-12F) nálam ilyen boardra vannak felforrasztva. Ennek a hátoldalán ott a hely az LDO-nak (ahogy írtam, HT7333-at használok). Az LDO-t beforrasztva az előlapon található középső 0 ohm-os ellenállást le kell forrasztani. Így a board VCC lábára kötött feszültség az LDO-n keresztül jut el az ESP8266-ig, azaz annak VCC-jén már 3.3V fog megjelenni. Ennek megfelelően az ESP VCC lábát kötöttem össze a CH_PD-vel (mert ugye az alaplap VCC-jéről a Li-Ion cella feszültségét kapná, ami induláskor kb. 4,2 V). Az ESP VCC lábáról kapja a feszültséget a DS18B20 is, valamint az ESP VCC és GND lába közé a stabil tápellátás érdekében egy 1000 uF-os kondit tettem. A DS18B20 GND lába GND-re, a DATA lába a GPIO2-re van kötve (ez utóbbit konstansként definiáltam a proggiban). Ennyi a bekötés, nincs semmi varázslat.
Azóta is stabilan megy mindkét példány. Mindenképpen beszámolok, hogy 1 cellával meddig bírja az eszköz. -
_q
addikt
válasz
Janos250 #7392 üzenetére
Régebben nem volt szerintem akkora gond még. Mikor kezdtem az MSP430-as Texas Instruments mikrovezérlőkkel, akkor egyszerűbb volt a portok BIT szinten történő beállítása, legalább is az ESP32-es kóddal összehasonlítva. Persze ott nem is volt lehetőség minden portot mindenféle módban használni.
Ahogy rugalmasabbá válik a programozás (portkezelést mint példa), mellette meg úgy bonyolodik is. Viszont Arduino kerek segítenek megtalálni az egyensúlyt. Egymást kiegészítve jönnek fel párhuzamosan. MSP430 mikor elkezdett terjedni, még nem csak BIT szinten lehetett programozni, ma meg már Arduino keretek között is lehet. Fejlődik ez a terület is, ami nekünk csak jó.
-
Janos250
őstag
válasz
Teasüti #7383 üzenetére
"Példánál maradva:"
Ha ugyanabból a
hardware\espressif\esp32\cores\esp32\esp32-hal-gpio.c
fájlból a pinMode-ot idézed, még szembetűnőbb a dolog. A 77. sortól a 165-ig tart!
Na, ezekért választom én is az Arduinot. Persze azért fél szemmel lesem azt is, hogy freeRTOS-ben mi van mögötte, illetve, hogy a freeRTOS mögött mi van regiszter szinten. -
Tankblock
aktív tag
válasz
Teasüti #7383 üzenetére
Hello,
Akkor én felvállalom hogy több mint 1 van ebben az értelemben.
Arduino defacto programozási nyelv --> azaz szépen eltünteti a felhasználó elöl hogy mit is használ, aztán meg ha véletlenül 2 könyvtár ugyanazt az erőforrást használja akkor jön a probléma.
Ugyanaz mint amikor a WS2812 könyvtár RMT használja, meg mondjuk lehetne még használni IR adó vevőnek ugyanezt az erőforrást mert 8 csatornája van ha jól emlékszem,
Én ezért fogtam bele az ESP-IDF be és igen nincs minden dokumentálva, és néha nagyot lehet mellényúlni.
A másik oldalról, meg a fejlesztők ESP-IDF c++ kompatibilis és eclipse alatt lehet c++ is programozni. Akár Arduinos könyvtárat is behúzni / átírni....Vagy csak kevés időmben is mazoista vagyok...
Nem szólnám le ezt sem. Ez mellett szeretem az Arduino-t. Szeretem, hogy kész dolgokat kell csak összerakni és fut. Ezzel spórolhatok időt és az összes ESP8266 home automation erre épül.
Mindegyiknek megvan a szépsége.
-
_q
addikt
válasz
Janos250 #7389 üzenetére
Én STM32-t keil-be programoztam függvénykönyvtárak segítségével. Regiszter vagy alacsonyabb assembly programozás sose vonzott, nem is terveztem használni, tehát ez ennek dokumentált hiányossága nem zavaró számomra.
Így ha jól értem az ESP32 + Arduino kombó nekem való, ráadásul a bluetooth (BLE vagy minden féle bluetooth nem tudom) kommunikációs hiányosságokat eltekintve mindent meg lehet Arduino környezetben valósítani. Meglátom, ha megjön a valóságban mi lesz.Köszi a részletes leírást.
-
Janos250
őstag
Teasüti jól összefoglalta a dolog lényegét, pár dolgot tennék hozzá:
Az Arduino ugyebár egy de facto "programozási szabvány". Azt mondja ki, hogy ha portolják egy kontrollerre, akkor bizonyos függvényeket, osztályokat kötelező az adott kontroller "nyelvén" megcsinálni, ami utána az "Arduino része" lesz. Ez nagyon nagy könnyebbség. Az STM32-re is portolták az Arduinot, elég jó is.
Az ESP32 kissé más, mint a többi:
Először is adott két mag. Azonkívül az általam ismert kontrollereknél a perifériák regisztereit memória címen símán elértem. Többnyire adott volt, hogy melyik periféria melyik lábhoz tartozik. Na, ez az ESP32-nél nem ennyire egyszerű. Bevezettek egy mátrixot, ezen keresztül lehet elérni a perifériákat. Ez nagyfokú rugalmasságot biztosít, mert bármelyik periféria bármelyik lábhoz kapcsolható, de egyben bonyolultságot is, mert meg kell mondanod,hogy mi mihez kapcsolódjon. Aztán, hogy még bonyolítsuk a dolgot, a perifériák alapállapotban "alszanak", pl. órajelet se kapnak.
Így még a hozzá tartozó regisztereket se tudod se írni, se olvasni. Először kell nekik órajelet adni, és resetelni, utána írhatók, olvashatók a regiszterei. Az órajel adás és a resetelés elvileg egyszerű: elérhető regiszterekben az adott perifériához tartozó bitet kell beállítani órajelhez, illetve törölni a resethez.
Igen ám, csakhogy az ESP azt nem mondja meg, hogy melyik perifériához melyik bit tartozik. Sebaj, kinézzük az illesztő programokból, gondolja Móricka. Viszont az illesztő programok lefordított assembly programok, aminek a forráskódját az ESP nem hozta nyilvánosságra eddig. Tehát a processzor közeli programozás még egy ideig macerás lesz. Az Arduino rendszerben viszont minden elég jól ki van dolgozva.
Tehát:
Az ESP megcsinálta az alapvető kezelést biztosító assembly nyelvű rutinokat.
Erre épülve készült el rá a freeRTOS. Ezt használja az IDF is. A freeRTOS-ra épülve portolták az Arduinora.
A freeRTOS függvényeit - általában - Arduino rendszerben is lehet használni, hiszen az Arduino "szabvány" függvényei is ebben íródtak.
Összefoglava:
Arduinoban programozása kényelmes, nagyon gyors, rengeteg a periféria, a két mag más programozási technikákat is lehetővé tesz, de ha processzor közeli módon akarod használni, az azért még jelenleg szívás. -
Janos250
őstag
válasz
ngabor2 #7385 üzenetére
Én ezt így oldottam meg:
https://www.aliexpress.com/item/Mantistek-WR300-Wifi-Router-Repeater-802-11N-B-G-Computer-Networking-Range-Expander-Wireless-300M-Roteador/32797460376.html?ws_ab_test=searchweb0_0,searchweb201602_5_10152_10065_10151_10344_10068_5000016_10345_10342_10343_10340_5060016_10341_5130016_10541_10084_10083_10304_10307_10302_10539_10312_10059_10313_5080016_10314_10534_100031_10604_10603_10103_10605_10594_10596_10142_10107,searchweb201603_31,ppcSwitch_5&algo_expid=207c876a-062e-40dd-9580-789d0625f104-2&algo_pvid=207c876a-062e-40dd-9580-789d0625f104&rmStoreLevelAB=1
Az egész házban mindenre van erős WiFi.Szerk: most vettem észre, hogy a készülék házról beszélsz. Arra persze nem jó, de azért a linket hagyom, hátha valakinek gyenge WiFi gondja van, mert arra nekem nagyon bevált.
Ehhez adnak antennát, de csatit nem látok a panelon. Pedig tényleg jó lenne bizonyos esetekben.
https://www.ebay.com/itm/4-MB-Flash-WEMOS-ESP-32-Lolin32-CP2104-WIFI-Bluetooth-Card-2-4G-SMA-Antenna/322918312671?hash=item4b2f6e6adf:m:mZNqIunaMOUkNkwzeHbjrCg -
ngabor2
nagyúr
Én is kacsingatok az ESP32 felé. Viszont ebből egyáltalán nem, ESP12-ből is elvétve lehet találni olyat, amire külső antennát lehet csatlakoztatni. Ez zárt fém háznál viszont igen hasznos tud lenni.
Rá lehet valahogy mégis tenni, vagy könnyebb elrontani mint jól megcsinálni?
-
_q
addikt
válasz
Teasüti #7383 üzenetére
Köszi a részletes leírást. Tetszett a fogalmazási stílus, 1-2 mondaton jól felmosolyogtam, természetesen jó értelemben
és tudtam azonosulni azzal amiket írtál.
STM32-t, TI launchpadokkal van kevéske tapasztalatom, de azt látom, hogy egyre jobban jönnek fel a mindent függvénnyel, illetve arduino módszerrel (nem tudom ennek mi a pontos neve, tehát hogy ne kelljen mély C tudás, említett példa: digitalRead() ) programozzunk lehetőségek és nekem ez tetszik is. Vannak területek ahol fontos a minél kisebb kód, és optimalizált megoldás, de a mikrovezérlők teljesítmény növekedésével egyre kevésbé fontos, így szerencsére mindenki meg tudja találni a maga számára elegendő C tudást igénylő kontrollert. Emellett STM32-t se zárom ki, nekem az is tetszett, de most kicsit az arduino jellegű programozás foglalkoztat.
Egy a nehéz, projektet kitaláljak magamnak ami hasznos is, esetleg kicsit tanulni is lehetne belőle, de még is nem annyira nehéz, hogy fogjam a fejem, hogy most ez miErre neten szerencsére vannak ötletek.
Szóval még egyszer köszi, maradok a topicnál, sok jó dolgot lehet is olvasni és jó látni, hogy sok a segítőkész fórumtárs
-
Teasüti
nagyúr
Nagy overhead a ram és rom méreteket illetően, bár van hely bőven így ez nem akkora probléma.
Emiatt ugye a számítási teljesítmény egy része is elúszik. Bár így is 100x gyorsabb egy UNO-nál, szóval mindegy is.
Egyfajta virtualizációhoz lehetne hasonlítani.Mondjuk nem hiszem, hogy nálam összetettebb felhasználása volna itt még vkinek (73 KB-os forráskód +könyvtárak, amiből a BLE megeszi a rom a közel 70%-át) és jómagam sem futottam még bele se teljesítmény se tárterület problémába. Mondjuk még szeretném majd kipróbálni az OTA programfeltöltést. Arra számítok, hogy az még egy jelentősebb szeletet elvesz a tárból.
A wifi azt hiszem teljes támogatottságot élvez, a BLE már működőképes, de még "béta" állapotú és így nem fejleszt rá egyetlen 3rd party sem. Ez azt jelenti, hogy a valós alkalmazásokban sok mindent magadnak kell megoldani.
A perifériák közül eddig én egyedül csak az RMT-t használtam, így a többiről nem tudok nyilatkozni.
Az Arduino függvények úgy tudom működnek mind, illetve nem tudok példát hozni az ellenkezőjére.
Nekem az UNO-ra írt programom egy az egyben lefordult ESP32-re is (az Atmel-re írt könyvtárak nélkül természetesen), így ez teljes értékűnek tekinthető szerintem.Nálam is tervben volt az IDF megismerése és az alacsonyabb C nyelv tanulgatása, de így hogy megy amit akartam Arduino-ban is, így nekem nem is fontos.
Meg a mai világban már nem divat a nehezebb úton menni és szopatni magad a hardver specifikus utasításkészlettel és telefonkönyv módszerrel regisztereket programozni, amikor némi overhead árán, de pár absztrakciós réteggel feljebb is meg lehet oldani a problémát könnyen és gyorsan, specializált tudás nélkül.
Persze nem is lesz olyan hatékony a kód, de ki nem szarja le, érted... Ez nem a Crysis, hogy ultra grafikán kisajtoljak minden fps-t a vasból.
Senkit nem érdekel mit csinál a digitalRead(), amíg megvan az eredmény.
Példánál maradva:extern int IRAM_ATTR __digitalRead(uint8_t pin)
{
if(pin < 32) {
return (GPIO.in >> pin) & 0x1;
} else if(pin < 40) {
return (GPIO.in1.val >> (pin - 32)) & 0x1;
}
return 0;
}Na most e szerint az sem mindegy melyik lábat olvasom. Programozzon így az, akinek két anyja van!
Én inkább beírom, hogy digitalRead() és együtt élek az overhead-del. -
kmisi99
addikt
Sziasztok, vettem egy arduino pro mini-t amint nincs usb. Ehhez egy ilyen átalakító kell, hogy képes legyek programozni? [link]
-
_q
addikt
válasz
Janos250 #7354 üzenetére
Olvasgattam kicsit. Azt íták, hogy az ESP IDF környezetben lehet a leginkább kihasználni az ESP32-t. Arduinot fejlesztgetik, ezzel is használható, de elsődlegesen nem ez az ajánlott.
Én Arduino IDE környezetben szeretném a programozást megoldani. Kérdésem az, hogy mit tapasztaltatok, milyen funkció nem az igazi, mi nincs implementálni ami miatt nem használható ki az ESP32?
-
petymek
senior tag
Sziasztok!
UNO R3 elektronikát 16U2 USB illesztővel szerelve Win 7 nem ismeri fel. Sehol nem találok hozzá drivert.
Tudnátok segíteni driverben? -
vargalex
félisten
válasz
vargalex #7023 üzenetére
Jelentem, 1 hete szépen megy 2 példány az ESP8266+DS18B20 RTC-s megoldásból. Végül azt választottam, hogy minden 10. mérésnél kicsivel hamarabb ébresztem a cuccot deep sleep-ből, szinkronizálok NTP-n, ha kell, akkor várok és post-olok. Természetesen RTC-be az NTP időt (unix timestamp) is leteszem, hogy tudjak mihez viszonyítani a következő post-kor. Az ESP-vel mérem a feszültséget is (getVcc függvénnyel), amit 10 percenként tárolok, de ugye ez a HT7333 által már csökkentett feszültséget méri. Ez nyilván nem változott az indulás óta. Azért rámértem multiméterrel is, most 4,15 V a cella feszültsége. Sajnos induláskor nem mértem, hogy megvolt-e a 4,2V, így sokat még nem jelent. Illetve mindkét példány bontott (Lii-500 szerint kb. 2000 mAh-s példányok) notebook akkuból származik. Kíváncsi vagyok, hogy meddig fog üzemelni (figyelem a mért feszültséget, 2,8-2,9V körül majd cserélem). Ha érdekel valakit, szívesen megosztom a kódot, illetve bekötést, valamint képet is csinálhatok, bár még a kinézet szépsége nem volt cél.
-
_q
addikt
válasz
Tankblock #7369 üzenetére
Köszi. Végül egy külső tápcsatis nélkülit rendeltem. Ha esetleg kell akkor magam beforrasztok egy csatit pluszba.
Addig is míg megjön. Tudtok ajánlani oldalt, amit érdemes olvasgatni ESP 32S-el kapcsolatban? Kezdve az arduino környezet beüzemelésével, ahol adatlapot találok a development board-ról, esetleg hasznos kiinduló minta példákat tartalmazó oldalt?
-
-
-
Végre megcsináltam a 2 kerekes autóm, bluetooth távirányítással. Egyrészt nagyon király, hogy működik, de sajnos nem sokáig működik. Valami mindig szétmegy, legtöbbször a bluetooth modul veszti el a kapcsolatot. De gyakorlatilag bármi bármikor, kereke leeseik, jumper kábel leugrik a helyéről... Tipp? Fixáljak le mindent folyékony ragasztóval?
-
Teasüti
nagyúr
válasz
CHIPman #7362 üzenetére
Semminek, hisz adat nélkül nem kapcsol be. Viszont ha adsz az adatbusznak egy kis interferenciát (vagy töltést az ujjaddal), akkor lehet felvillan néhány led.
Ezekhez kell egy adatfolyam, ami pixelenként 24 bitből áll (ugye három színkomponens 8 biten), és egy bit a szalag protokollja szerint egy magas és egy alacsony logikai jelszint adott időzítéssel. Szóval ezt te nem fogod úgy vezérelni, mint egy analóg szalagot, vagy egy ledet.
Ezekhez alapesetben egy könyvtárat szokás használni, amit a mikrovezérlődhöz választasz. Mint pl az Adafruit féle Neopixel, ami azt hiszem működik ESP-vel is.
Ezekben találsz példákat az animációkra.
Szóval itt animációt programozunk, jobban mondva egyenként ki kell számolni a pixelek színeit és berakni egy uint8_t tömbbe, majd ezt küldi ki a szalagra a könyvtár megfelelő függvénye. -
Teasüti
nagyúr
válasz
CHIPman #7352 üzenetére
Hogyne lenne róla leírás, ne viccelj!
WS2812b a leánykori neve, több száz oldal foglalkozik a témával. Hozzádobod, h ESP és garantálom lesz rá találat.
Annyit fűznék hozzá, hogy ha komolyabb projekten dolgozol, ahol a szalag meghajtásán kívül mást is kéne csinálni, akkor tudni kell, hogy jelenleg az ESP32-n kívül minden más szoftveresen kezeli a szalagot és az adatküldés blokkolja a programot. Tehát nem lehetnek megszakítások és így arra a rövidke időre megszűnik a beérkező adatok fogadása.
-
Teasüti
nagyúr
-
CHIPman
nagyúr
Üdv.
Már régóta van egy címezhető RGB led stripem, viszont 3 bemenetű, "+", "data" és "-". Értelemszerűen 5V-os. Nem találtam még olyan leírást, ami ehhez lenne írva, mindenhol a 4 bemenetűt látom.
ESP eszközeim vannak, minimálisan konyítok hozzá, de eddig még nem sikerül működésre bírnom a ledeket. (Nem címezhető stripet mosfettel már vezéreltem gond nélkül ESP-ről, csak ez nem megy.) Dolgozott már valaki ilyennel? -
_q
addikt
válasz
Janos250 #7348 üzenetére
Köszi a részletes leírást. Ezek szerint minimális eltérés van, pl.: Wemos tesz rá egy külsö táp csatlakozót is mint ami a lentebb képen látható és 1 reset gombot (ami szemmel látható különbség elsőre). WROOM esetén nincs külső táp csatlakozó, de van egy plusz gomb, gondolom programozható. Szignifikáns külnbség nem nagyon van közöttük. Illeve ide jöhetnek még az OLED kijelzős verziók, ahol már kicsivel nagyobb lábkiosztás vagy egyéb eltérések is felléphetnek.
Arduino-t akartam először a programozási könnyebbség miatt, de mivel ESP32 teljesítményben illetve modulokban is jobb, olcsóbban, így gyorsan tovább is léptem az arduino-n. Köszi a linkeket, valószínűleg ezek közül választok.Tankblock
Neked is köszi az észrevétel. Ha jól értem akkor a képen jelölt külső aksi/táp csatlakozóra érted, hogy fel van cserélve a VCC-GND kivezetés?
Új hozzászólás Aktív témák
- Szuper áron eladó új ACER SWIFT EDGE 16 /R7-7735U/16GB/512SSD/ 4K OLED
- DELL G15 5515 Gamer Laptop /Ryzen 7- 5800H/16GB 512 SSD/ Nvidia RTX 3060 6GB/120Hz/
- Szuper áron dobozos új Asus Vivobook Pro /i5-11300H/16 GB/512SSD/3K OLED
- Dobozos új Lenovo Ideapad Slim 5 Laptop /R7-7730U/16 GB Ram/512 SSD/14" FHD+ OLED/ Garancia16 hónap
- Dell Inspiron 15 3530 /13.gen i7-1355U/16GB/512 GB SSD FHD Garancia
- Bomba ár! Lenovo ThinkPad T495 - AMD Ryzen PRO 7 I 16GB I 256GB SSD I 14" FHD I Cam I W11 I Gari!
- iKing.Hu - Honor 200 Pro - Moonlight White - Használt, karcmentes
- AKCIÓ! MSI B450 R5 3600X 16GB DDR4 512GB SSD RX 5700XT 8GB Zalman S2 TG Zalman 600W
- ÁRGARANCIA!Épített KomPhone i9 14900KF 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
- Samsung Galaxy A8 2018 32GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest