Go Down

Topic: De Esprssif en de APA102  (Read 531 times) previous topic - next topic

picturemaker

Jun 19, 2018, 08:10 pm Last Edit: Jun 20, 2018, 04:28 pm by picturemaker
Beste allemaal,

Ik ben nieuw hier dus even voorstellen;
De naam is Martien ik woon in Noord Brabant en heb een E en ICT achtergrond.  (met een 'heel klein beetje" programeerervaring)

Daarnaast ben ik ook Fotograaf en daarvoor wil ik het onderstaande project gaan gebruiken.

Ik wil met de Espressif ESP32 DevKitC (ESP32 Core Board V2)
de LED RGB Strip - Addressable, 1m (APA102) aansturen.

De "opzet" van de code wordt het zelfde als in deze video
https://www.youtube.com/watch?v=_mIDsAo3DA0
Dus ook met Arrays en met een "eigen" ESP32 webpagina,om de leds via Wifi met een laptop of Smartphone te bedienen.  
De code staat (vlgs mij) niet meer op de bewuste website daarom zet ik h'm er even bij.

#include "NeoPixelBus.h" // Library to control Pixel Stick
#include <WiFi.h>    //"ESP8266WiFi.h" // WiFi Library

#define PixelCount 8 // Number of leds on stick
#define PixelPin 2 // NodeMCU pin 2 (RX) connected to Digital In of Pixel Stick

const char* ssid = "xxxxxxx"; // Name of WiFi Network
const char* password = "xxxxxxx"; // Password of WiFi Network

int firstrun = 0; // Check if system was just powered on
int buttonpressed = 5; // To hold which button was pressed on Web Page

// Initialize Library
//NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

// Define Arrays for colors
long switchled00[] =
{
0x0E5219, 0x52160E, 0x0E5219, 0x52160E,0x0E5219,0x52160E,0x0E5219,0x52160E
};

long switchled01[] =
{
0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19
};


WiFiServer server(80); // Define Web Server Port

void setup() {
Serial.begin(115200);
delay(10);

//strip.Begin(); // Init of Pixel Stick
//strip.Show(); // Clears any lit up Leds

// Connect to WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);

// Wait until connected to WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}

// Confirmation that WiFi is connected
Serial.println("");
Serial.println("WiFi connected");

// Start the Web Server
server.begin();
Serial.println("Web Server Started");

// Display IP address
Serial.print("You can connect to the Server here: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println();
Serial.println();

}


void loop() {

// Check if someone is connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Read which button was pressed on the Web Page
String request = client.readStringUntil('\r');

// Light Up leds based on the button pressed
if (request.indexOf("/REDGREEN=1") != -1) {
for (int led = 0; led < 8; led++) {
//strip.SetPixelColor(led, HtmlColor(switchled00[led]));
}
//strip.Show();
buttonpressed = LOW;
firstrun=1;
}
if (request.indexOf("/BLUEYELLOW=1") != -1) {
for (int led = 0; led < 8; led++) {
//strip.SetPixelColor(led, HtmlColor(switchled01[led]));
}
//strip.Show();
buttonpressed = HIGH;
firstrun=1;
}

// Create Web Page
client.println("HTTP/1.1 200 OK"); // HTML Header
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");

client.println("<html>"); // Start of HTML

client.println("<style>");
client.println("body {background-color: #ACAEAD;}"); // Set Background Color
client.println("</style>");

if (firstrun == 0) {
client.print("Please Click a Button ");
}
else {
client.print("Last Button Pressed was ");
}

if(buttonpressed == LOW) {
client.print("Red & Green");
}
if (buttonpressed == HIGH){
client.print("Blue & Yellow");
}
client.println("<br><br>");
client.println("<a href=\"/REDGREEN=1\"\"><button>Red & Green </button></a>");
client.println("<a href=\"/BLUEYELLOW=1\"\"><button>Blue & Yellow </button></a><br />");
client.println("</html>");
delay(10);


Het "grote" verschil is dat ik een andere strip en een ander board wil gebruiken.  De ESP32 heeft nl 4 aansluitdraden.
Het voordeel daarvan is dat je iedere led apart aan kunt sturen.
Verder wil ik de website op de ESP32 direct benaderen dus niet via een externe bestaande router.
Als ik me niet vergis kan dat o.a met deze regel "WiFi.softAP (ssid , password)".

In deze video staat een voorbeeld hoe je de APA 102 met de ESP32 aanstuurt
https://www.youtube.com/watch?v=jQivXOvkkC8
De code staat hier:
https://github.com/pcbreflux/espressif/blob/master/esp32/arduino/sketchbook/ESP32_APA102/ESP32_APA102.ino

Het wisselend kleurpatroon en het knipperen heb ik niet nodig,de kleuren moeten dus constant zijn.
Daarom denk ik dat de code van line 1 t/m 79 wel op een of andere manier bruikbaar is.

De vraag is hoe kun je "beide" samenbrengen tot een werkend geheel.

Hopelijk kan iemand mij hier mee verder helpen en het zou heel mooi zijn als iemand de code kompleet voor me maakt.....maar ik weet niet of dat haalbaar is.


Reacties zijn meer dan welkom !

Martien

picturemaker

#1
Mar 21, 2019, 09:31 am Last Edit: Mar 21, 2019, 09:34 am by picturemaker
Beste allemaal,

Ik ben nieuw hier dus even voorstellen;
De naam is Martien ik woon in Noord Brabant en heb een E en ICT achtergrond.  (met een 'heel klein beetje" programeerervaring)

Daarnaast ben ik ook Fotograaf en daarvoor wil ik het onderstaande project gaan gebruiken.

Ik wil met de Espressif ESP32 DevKitC (ESP32 Core Board V2)
de LED RGB Strip - Addressable, 1m (APA102) aansturen.

De "opzet" van de code wordt het zelfde als in deze video
https://www.youtube.com/watch?v=_mIDsAo3DA0
Dus ook met Arrays en met een "eigen" ESP32 webpagina,om de leds via Wifi met een laptop of Smartphone te bedienen. 
De code staat (vlgs mij) niet meer op de bewuste website daarom zet ik h'm er even bij.

#include "NeoPixelBus.h" // Library to control Pixel Stick
#include <WiFi.h>    //"ESP8266WiFi.h" // WiFi Library

#define PixelCount 8 // Number of leds on stick
#define PixelPin 2 // NodeMCU pin 2 (RX) connected to Digital In of Pixel Stick

const char* ssid = "xxxxxxx"; // Name of WiFi Network
const char* password = "xxxxxxx"; // Password of WiFi Network

int firstrun = 0; // Check if system was just powered on
int buttonpressed = 5; // To hold which button was pressed on Web Page

// Initialize Library
//NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

// Define Arrays for colors
long switchled00[] =
{
0x0E5219, 0x52160E, 0x0E5219, 0x52160E,0x0E5219,0x52160E,0x0E5219,0x52160E
};

long switchled01[] =
{
0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19
};


WiFiServer server(80); // Define Web Server Port

void setup() {
Serial.begin(115200);
delay(10);

//strip.Begin(); // Init of Pixel Stick
//strip.Show(); // Clears any lit up Leds

// Connect to WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);

// Wait until connected to WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}

// Confirmation that WiFi is connected
Serial.println("");
Serial.println("WiFi connected");

// Start the Web Server
server.begin();
Serial.println("Web Server Started");

// Display IP address
Serial.print("You can connect to the Server here: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println();
Serial.println();

}


void loop() {

// Check if someone is connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Read which button was pressed on the Web Page
String request = client.readStringUntil('\r');

// Light Up leds based on the button pressed
if (request.indexOf("/REDGREEN=1") != -1) {
for (int led = 0; led < 8; led++) {
//strip.SetPixelColor(led, HtmlColor(switchled00[led]));
}
//strip.Show();
buttonpressed = LOW;
firstrun=1;
}
if (request.indexOf("/BLUEYELLOW=1") != -1) {
for (int led = 0; led < 8; led++) {
//strip.SetPixelColor(led, HtmlColor(switchled01[led]));
}
//strip.Show();
buttonpressed = HIGH;
firstrun=1;
}

// Create Web Page
client.println("HTTP/1.1 200 OK"); // HTML Header
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");

client.println("<html>"); // Start of HTML

client.println("<style>");
client.println("body {background-color: #ACAEAD;}"); // Set Background Color
client.println("</style>");

if (firstrun == 0) {
client.print("Please Click a Button ");
}
else {
client.print("Last Button Pressed was ");
}

if(buttonpressed == LOW) {
client.print("Red & Green");
}
if (buttonpressed == HIGH){
client.print("Blue & Yellow");
}
client.println("<br><br>");
client.println("<a href=\"/REDGREEN=1\"\"><button>Red & Green </button></a>");
client.println("<a href=\"/BLUEYELLOW=1\"\"><button>Blue & Yellow </button></a><br />");
client.println("</html>");
delay(10);


Het "grote" verschil is dat ik een andere strip en een ander board wil gebruiken.  De ESP32 heeft nl 4 aansluitdraden.
Het voordeel daarvan is dat je iedere led apart aan kunt sturen.
Verder wil ik de website op de ESP32 direct benaderen dus niet via een externe bestaande router.
Als ik me niet vergis kan dat o.a met deze regel "WiFi.softAP (ssid , password)".

In deze video staat een voorbeeld hoe je de APA 102 met de ESP32 aanstuurt
https://www.youtube.com/watch?v=jQivXOvkkC8
De code staat hier:
https://github.com/pcbreflux/espressif/blob/master/esp32/arduino/sketchbook/ESP32_APA102/ESP32_APA102.ino

Het wisselend kleurpatroon en het knipperen heb ik niet nodig,de kleuren moeten dus constant zijn.
Daarom denk ik dat de code van line 1 t/m 79 wel op een of andere manier bruikbaar is.

De vraag is hoe kun je "beide" samenbrengen tot een werkend geheel.

Hopelijk kan iemand mij hier mee verder helpen en het zou heel mooi zijn als iemand de code kompleet voor me maakt.....maar ik weet niet of dat haalbaar is.


Reacties zijn meer dan welkom !

Martien

Bringamosa

#2
Mar 21, 2019, 09:27 pm Last Edit: Mar 21, 2019, 09:29 pm by Bringamosa
Als je de code tags gebruikt gaat het lezen wat makkelijker.




Code: [Select]

#include "NeoPixelBus.h" // Library to control Pixel Stick
#include <WiFi.h>    //"ESP8266WiFi.h" // WiFi Library

#define PixelCount 8 // Number of leds on stick
#define PixelPin 2 // NodeMCU pin 2 (RX) connected to Digital In of Pixel Stick

const char* ssid = "xxxxxxx"; // Name of WiFi Network
const char* password = "xxxxxxx"; // Password of WiFi Network

int firstrun = 0; // Check if system was just powered on
int buttonpressed = 5; // To hold which button was pressed on Web Page

// Initialize Library
//NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

// Define Arrays for colors
long switchled00[] =
{
0x0E5219, 0x52160E, 0x0E5219, 0x52160E,0x0E5219,0x52160E,0x0E5219,0x52160E
};

long switchled01[] =
{
0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19, 0x19257B, 0x7B7A19
};


WiFiServer server(80); // Define Web Server Port

void setup() {
Serial.begin(115200);
delay(10);

//strip.Begin(); // Init of Pixel Stick
//strip.Show(); // Clears any lit up Leds

// Connect to WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);

// Wait until connected to WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}

// Confirmation that WiFi is connected
Serial.println("");
Serial.println("WiFi connected");

// Start the Web Server
server.begin();
Serial.println("Web Server Started");

// Display IP address
Serial.print("You can connect to the Server here: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println();
Serial.println();

}


void loop() {

// Check if someone is connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Read which button was pressed on the Web Page
String request = client.readStringUntil('\r');

// Light Up leds based on the button pressed
if (request.indexOf("/REDGREEN=1") != -1) {
for (int led = 0; led < 8; led++) {
//strip.SetPixelColor(led, HtmlColor(switchled00[led]));
}
//strip.Show();
buttonpressed = LOW;
firstrun=1;
}
if (request.indexOf("/BLUEYELLOW=1") != -1) {
for (int led = 0; led < 8; led++) {
//strip.SetPixelColor(led, HtmlColor(switchled01[led]));
}
//strip.Show();
buttonpressed = HIGH;
firstrun=1;
}

// Create Web Page
client.println("HTTP/1.1 200 OK"); // HTML Header
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");

client.println("<html>"); // Start of HTML

client.println("<style>");
client.println("body {background-color: #ACAEAD;}"); // Set Background Color
client.println("</style>");

if (firstrun == 0) {
client.print("Please Click a Button ");
}
else {
client.print("Last Button Pressed was ");
}

if(buttonpressed == LOW) {
client.print("Red & Green");
}
if (buttonpressed == HIGH){
client.print("Blue & Yellow");
}
client.println("<br><br>");
client.println("<a href=\"/REDGREEN=1\"\"><button>Red & Green </button></a>");
client.println("<a href=\"/BLUEYELLOW=1\"\"><button>Blue & Yellow </button></a><br />");
client.println("</html>");
delay(10);



Helaas ben ik niet echt handig in code schrijven dus hopelijk komt er nog iemand anders langs

MAS3

Hoi Martien, welkom ook in het Nederlandstalige gedeelte.

Inmiddels heb je driekwart jaar gehad om even de gebruiksaanwijzing (klik !) te lezen en verwerken.
Dat is ook in het Engels, want het is universeel voor dit forum (en eigenlijk voor elk forum), maar Engels is geen probleem voor jou.

Je hebt ook de tijd gehad om er iets verder mee te geraken.
Dus ben je al wat wijzer geworden, of moet het wiel nog uitgevonden worden ?
Als je hier al wat gelezen hebt dan zul je bemerkt hebben dat we hier niet zo zijn van het geven van een passende code, maar dat we heel graag met je meekijken en je adviezen geven terwijl jij je Arduino code ontwikkelt.

Wanneer je de gebruiksaanwijzingen gelezen hebt, dan weet je bijvoorbeeld ook dat het noemen van een product niet zomaar betekent dat  en weet waar jij het over hebt.
En dan is het dus beter om een link naar de beschrijving van dat product wat jij hebt te plaatsen.
Dat is dus exact wat jij hebt, en niet iets dat er ook wel wat van weg heeft.
Want dan pas kan er eens gekeken worden hoe dat eigenlijk werkt en of jij er ook mee kunt doen wat je je er bij voorstelde (en dat moet je dan dus ook nauwkeurig beschrijven).

Vergeet niet dat jij om hulp vraagt.
Dus wanneer je a zo veel en compleet mogelijke informatie aandraagt, is de kans dat je een gericht antwoord krijgt veel groter.
En daar heb jij dan weer wat aan.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up