ESP8266 clone en ledstrip aansturen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • DamianSixSixSix
  • Registratie: Oktober 2017
  • Laatst online: 21-04-2023
Ik heb een kloon nodemcu, en nu wil ik dat gebruiken om een ledstrip aan te sturen, zodat ik er een digitale clock van kan maken.
probleem is, de strip werkt op 5v en de clone is 3.3v.
als ik de sketch upload, gaat de eerste led wel aan, maar de strip doet totaal niet wat ik wil…

ik dus naar google, blijkt dat een ledstrip van 5v, ook 5v op de data lijn moet hebben wil het werken.
dus ik koop zo een logic shifter dingetje, en probeer het weer.

weer niks… :?


iemand die dit ook wel eens heeft gedaan, en die wat pointers voor me heeft?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Vuikie
  • Registratie: December 2003
  • Laatst online: 08:22
Ik heb een woordklok gemaakt op basis van een ESP8266(ESP-01) en die werkt bij mij gewoon. Ik heb een WS2812b strip besteld en zowel via een level-shifter, als direct op de ESP uitgang aangesloten en alle 2 werkt het naar behoren.
Alhoewel ik er nu wel over denk om de level-shifter er weer tussenuit te halen, omdat ik nu af en toe de verkeerde kleur op een random LED krijg. Die corrigeert zich wel weer, maar het is wel jammer dat dit gebeurd. Toen ik de LED-strip direct op de uitgang aansloot had ik dit probleem niet. Ik moet op zoek naar een level-shifter die 800Khz aan kan. Ik heb het gevoel dat de level-shifter die ik nu heb de 800Khz net niet aan kan. Maar goed, terug naar jouw'n probleem.
Welke library gebruik jij? Ik gebruik de Adafruit NeoPixel library en deze werkt voor mij perfect.

[ Voor 7% gewijzigd door Vuikie op 11-04-2019 21:45 ]


Acties:
  • 0 Henk 'm!

  • DamianSixSixSix
  • Registratie: Oktober 2017
  • Laatst online: 21-04-2023
ja, die gebruik ik ook, de ESP8266(ESP-01), in combinatie met de adafruit neopixel library

maakt het nog uit op welke pin je data zit aangesloten? ik zit op d4, aka pin 2

hier is de code die ik gebruik

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Adafruit_NeoPixel.h>

char ssid[] = "yourssidhere";
char pass[] = "yourwifipasshere";

int hours =0;
int mins =0;

#define PIN 2
#define NUMPIXELS 100
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

unsigned int localPort = 2390;

IPAddress timeServerIP;
const char* ntpServerName = "time.nist.gov";

const int NTP_PACKET_SIZE = 48;

byte packetBuffer[ NTP_PACKET_SIZE];

WiFiUDP udp;

void setup()
{
Serial.begin(115200);
Serial.println();

Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);

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

Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

Serial.println("Starting UDP");
udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(udp.localPort());
pixels.begin();
}

void loop()
{
WiFi.hostByName(ntpServerName, timeServerIP);

sendNTPpacket(timeServerIP);
delay(1000);

int cb = udp.parsePacket();
if (!cb) {
//Serial.println("no packet yet");
}
else {
//Serial.print("packet received, length=");
//Serial.println(cb);

udp.read(packetBuffer, NTP_PACKET_SIZE);

unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
unsigned long secsSince1900 = highWord << 16 | lowWord;
const unsigned long seventyYears = 2208988800UL;
unsigned long epoch = secsSince1900 - seventyYears;

hours = (epoch % 86400L) / 3600;
if (hours<24)
{
hours++;
}
if (hours==24)
{
hours=0;
}
mins = (epoch % 3600) / 60;

Serial.print(hours);
Serial.print(':');
Serial.println(mins);

drawdigit(0,255,0,0,hours/10);//Draw the first digit of the hour
drawdigit(21,255,0,0,hours-((hours/10)*10));//Draw the second digit of the hour
pixels.setPixelColor(42, pixels.Color(255,0,0));//Draw the two middle dots
pixels.setPixelColor(43, pixels.Color(255,0,0));
drawdigit(44,255,0,0,mins/10);//Draw the first digit of the minute
drawdigit(65,255,0,0,mins-((mins/10)*10));//Draw the second digit of the minute

delay(59500);//Request to NIST server should be separated by 60 seconds.


}
}


void drawdigit(int offset, int r, int g, int b, int n)
{

if (n==2 || n==3 || n== 4 || n==5 || n==6 || n==8 || n==9 )//MIDDLE
{
pixels.setPixelColor(0+offset, pixels.Color(r,g,b));
pixels.setPixelColor(1+offset, pixels.Color(r,g,b));
pixels.setPixelColor(2+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(0+offset, pixels.Color(0,0,0));
pixels.setPixelColor(1+offset, pixels.Color(0,0,0));
pixels.setPixelColor(2+offset, pixels.Color(0,0,0));
}
if (n==0 || n==1 || n== 2 || n==3 || n==4 || n==7 || n==8 || n==9)//TOP RIGHT
{
pixels.setPixelColor(3+offset, pixels.Color(r,g,b));
pixels.setPixelColor(4+offset, pixels.Color(r,g,b));
pixels.setPixelColor(5+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(3+offset, pixels.Color(0,0,0));
pixels.setPixelColor(4+offset, pixels.Color(0,0,0));
pixels.setPixelColor(5+offset, pixels.Color(0,0,0));
}
if (n==0 || n==2 || n== 3 || n==5 || n==6 || n==7 || n==8 || n==9)//TOP
{
pixels.setPixelColor(6+offset, pixels.Color(r,g,b));
pixels.setPixelColor(7+offset, pixels.Color(r,g,b));
pixels.setPixelColor(8+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(6+offset, pixels.Color(0,0,0));
pixels.setPixelColor(7+offset, pixels.Color(0,0,0));
pixels.setPixelColor(8+offset, pixels.Color(0,0,0));
}
if (n==0 || n==4 || n==5 || n== 6 || n==8 || n==9 )//TOP LEFT
{
pixels.setPixelColor(9+offset, pixels.Color(r,g,b));
pixels.setPixelColor(10+offset, pixels.Color(r,g,b));
pixels.setPixelColor(11+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(9+offset, pixels.Color(0,0,0));
pixels.setPixelColor(10+offset, pixels.Color(0,0,0));
pixels.setPixelColor(11+offset, pixels.Color(0,0,0));
}
if (n==0 || n==2 || n==6 || n== 8)//BOTTOM LEFT
{
pixels.setPixelColor(12+offset, pixels.Color(r,g,b));
pixels.setPixelColor(13+offset, pixels.Color(r,g,b));
pixels.setPixelColor(14+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(12+offset, pixels.Color(0,0,0));
pixels.setPixelColor(13+offset, pixels.Color(0,0,0));
pixels.setPixelColor(14+offset, pixels.Color(0,0,0));
}
if (n==0 || n==2 || n==3 || n== 5 || n==6 || n==8 || n==9)//BOTTOM
{
pixels.setPixelColor(15+offset, pixels.Color(r,g,b));
pixels.setPixelColor(16+offset, pixels.Color(r,g,b));
pixels.setPixelColor(17+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(15+offset, pixels.Color(0,0,0));
pixels.setPixelColor(16+offset, pixels.Color(0,0,0));
pixels.setPixelColor(17+offset, pixels.Color(0,0,0));
}
if (n==0 || n==1 || n==3 || n==4 || n==5 || n==6|| n==7 || n==8 || n==9)//BOTTOM RIGHT
{
pixels.setPixelColor(18+offset, pixels.Color(r,g,b));
pixels.setPixelColor(19+offset, pixels.Color(r,g,b));
pixels.setPixelColor(20+offset, pixels.Color(r,g,b));
}
else
{
pixels.setPixelColor(18+offset, pixels.Color(0,0,0));
pixels.setPixelColor(19+offset, pixels.Color(0,0,0));
pixels.setPixelColor(20+offset, pixels.Color(0,0,0));
}
pixels.show();
}


// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address)
{
//Serial.println("sending NTP packet...");
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;

// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
udp.beginPacket(address, 123); //NTP requests are to port 123
udp.write(packetBuffer, NTP_PACKET_SIZE);
udp.endPacket();
}