Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  17 1314
Hei jeg kjører et helt enkelt script på en arduino med en thermistor som måler temp, å viser temp på oled display.

Når jeg kjøpte meg en xiao esp32c3 å koblet opp de 5 ledningene som fungerte helt fint med arduino, så fungerer det ikke lenger, displayet viser bare en bokstav "C" å ikke noe mere, virker nesten som analog portene ikke fungerer ellr?
Bruker du samme volt på begge? ESP gir vel bare 3,3V, mens arduino kan gi 5V ut.
Jeg forstår ikke helt hva du prøver å si. Virket den første gangen eller ikke? Har du gjort endringer etter at den virket? Husk at ledninger kan løsne. Har du programmert riktig? Uten kode er det umulig å si noe om.

Har du fullført de enkleste oppgavene, som feks å blinke en LED?
hei takk for raskt svar, ja jeg får det til å virke på arduino, men ikke på xiao esp32c3, samme script å alt, er bare 5 ledninger å bytte, men på esp32c3 virker det ikke..

Kode

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <driver/adc.h>
#include <esp_now.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels


Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;


void setup(){
  display.begin(SSD1306_SWITCHCAPVCC,0x3C); //OLED address 
  display.clearDisplay();
  Serial.begin(9600);
}

void loop(){
  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  Tc = T - 273.15;

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(70, 0);
  display.println("C");
  display.display();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(3, 0);
  display.println(Tc);
  display.display();
  delay(10);
}
https://imma.gr/125305xd818d
https://imma.gr/125306x1b64e
https://imma.gr/125307x8ec35

Sitat av Yochi Vis innlegg
Bruker du samme volt på begge? ESP gir vel bare 3,3V, mens arduino kan gi 5V ut.
Vis hele sitatet...
den har 5 og 3.3 volt
Sist endret av Dyret; 6. februar 2024 kl. 19:32. Grunn: code tags
Da må du redusere antall potensielle problemer og f.eks starte med å se om du kan skrive tekst på skjermen om du bare kobler til den. Får du til det kan du utvide med temperaturmålingen.
jeg får til å skrive tekst til skjermen, det som er er at det virker som at a0 (analog portene) ikke fungerer liksom..

alt funker, utenom analog lesing
Da har du allerede kommet et stykke ved at du har lokalisert problemet ��

Har du dobbeltsjekket dokumentasjonen for brettet ditt på pin-nummer, stund siden jeg har holdt på med arduino/esp nå men mener å huske at nummereringen kunne variere endel.
https://imma.gr/125308xe7ee4
Jepp! har koblet den som på bildet..
Hvis du mener A0 ikke virker, så prøv A1 eller A2 og se om det virker der. Husk også at forskjellige versjoner av Arduino kanskje må programmeres anderledes. Sjekk dokumentasjonen.
har leitet i dagesvis, derfor jeg spør på forum.. Det er er jo noe an det enkelste man kan gjøre jeg skal.. jeg skal ha 1 komponent, en thermistor koblet til a0, trodde noen her kanskje hadde peilin på esp, jeg har prøvd: 0, 1,2,3,4 a0,a2,a3,a4, 01,02,03,04 ingenting fungerer, bestilte en ny xiao esp32c3, faen med det samme driten der å.. alt fungerer på arduino på sekundet, kobler til den driten esp fungerer ikke noe..
Som sagt det kan være at de er "mappet" annerledes, jeg er ikke så stø på det men på denne oversikten det lenkes til her: https://forum.arduino.cc/t/my-pinout...p32-c3/1126618 kan det se ut som A0 må defineres som pin 2 i koden.

Om du har prøvd 2 forskjellige er det stor sjanse for at det er noe du gjør feil og ikke noe med brettet.
Jeg har prøvd pin 0,1,2,3,4,5 så vet ikke hva det kan være? ALT jeg vil, er å måle temp å vise temp på led.. ikke noe mere xd men er jo helt umulig.. noen som fortalte meg at de eps32c3 er mye bedre enn adruino, men det er no ihvertfal ikke sant Xd noe skikkelig drit det here

har skrevet på arduino.cc sine forum nå, se om det er noen der som vet hvordan man kobler opp en thermistor...
Sist endret av ticsyboy; 6. februar 2024 kl. 12:43. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Da må du ta enda et steg tilbake, får du f.eks en led til å blinke på analog-pins? https://makeabilitylab.github.io/phy...led-blink.html

Om det fungerer vet du at selve ESPen fungerer og at det er større sjanse for at det er noe som må tilpasses i koden din.
ja jeg får til andre analoge ting, men ikke å måle temperatur :S

fikk det til

Her er koden:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int ThermistorPin = A0;
int Vo;
float R1 = 10000.0;
float logR2, R2, T, Tc;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //OLED address
display.clearDisplay();
Serial.begin(115200);
}

void loop() {
Vo = analogReadMilliVolts(2);
R2 = R1 * (((5*1000.0)/ float(Vo))-1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;

display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(70, 0);
display.println("C");
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(3, 0);
display.println(Tc);
display.display();
delay(10);
}

her er koden fungerende ed at thermistor må være koblet til 3.3 volt og ikke 5volt som jeg lærte nå..

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int ThermistorPin = A0;
int Vo;
float R1 = 10000.0;
float logR2, R2, T, Tc;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //OLED address
display.clearDisplay();
Serial.begin(115200);
}

void loop() {
Vo = analogReadMilliVolts(2);
R2 = R1 * (((3.3*1000.0)/ float(Vo))-1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;

display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(70, 0);
display.println("C");
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(3, 0);
display.println(Tc);
display.display();
delay(200);
}
Sist endret av ticsyboy; 7. februar 2024 kl. 10:01. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
ओम नमो नारायण
Dodecha's Avatar
DonorCrew
Liten kommentar:

int ThermistorPin = A0; //Denne integeren bruker du ikke, det er egentlig her du lagrer analogpin adressen, (A0 betyr Analogue pin 0 og refererer til en verdi satt av adafruit, verdien byttes ut med rett pin nummer av kompiler, skal du ha Analogue pin 2 skiver du bare A2)

Det er denne integeren som brukes i Vo = analogReadMilliVolts(ThermistorPin); originalt.
Sist endret av Dodecha; 7. februar 2024 kl. 14:51.
▼ ... noen uker senere ... ▼
Vet ikke om dette hjelper deg dersom noen av dine includes ikke er supportert for ESP32, men esp32 er 12-bits ADC, Arduino er 10-bits. ESP32 vil returnere verdier fra 0 til 4095. ikke 0 til 1023:

R2 = R1 * (4095.0 / (float)Vo - 1.0);


en kjapp rewrite med openai:

Kode


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <driver/adc.h>
#include <esp_now.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Use an ADC1 channel connected GPIO pin for the thermistor
// Example: GPIO34 on ESP32 is ADC1_CHANNEL_6
#define ThermistorPin 34 // Update this to the actual GPIO pin number you're using
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup(){
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // OLED address 
  display.clearDisplay();
  Serial.begin(9600);

  // Configure ADC resolution to 12 bits
  analogReadResolution(12);

  // Configure attenuation (if necessary)
  // For example, to measure up to the maximum range (approx. 3.3V), use 11dB attenuation
  analogSetPinAttenuation(ThermistorPin, ADC_ATTEN_DB_11);
}

void loop(){
  // For ESP32-C3, consider using analogReadMilliVolts for direct millivolt reading
  // This simplifies the calculation by providing a voltage reading directly
  Vo = analogRead(ThermistorPin);
  
  // Convert Vo to resistance (Ohm's Law) - adjust the calculation for 12-bit ADC
  R2 = R1 * (4095.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));
  Tc = T - 273.15; // Convert Kelvin to Celsius
  
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(70, 0);
  display.println("C");
  display.display();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(3, 0);
  display.println(Tc, 2); // Print with 2 decimal places
  display.display();
  delay(1000); // Adjust delay as needed
}
Blir ikke 0-4000 litt overkill for å måle temperatur?
Sist endret av GakkGakk2; 24. februar 2024 kl. 13:59. Grunn: Glemte en "l"
▼ ... over en måned senere ... ▼
Sitat av GakkGakk2 Vis innlegg
Blir ikke 0-4000 litt overkill for å måle temperatur?
Vis hele sitatet...
Man bruker 4095.0 for å konvertere digitalt signal tilbake til analogt (ADC/Analog to Digital Converter )
En 12-bits ADC kan representere 2^12, som er 4096.

Den laveste verdien den kan representere er 0.
Den høyeste verdien er 2^12 - 1, som er 4096 - 1
-1 *pga laveste er 0, som gjør at verdien vi bruker er 4095
(som er den maksimale digitale verdien en 12-bits ADC kan produsere)