esp 32 için yazılmiş kütüphane sorunu.
  • Merhaba esp 8266 ve oled kullanarak rss okuyucu yapmaya çalışıyorum.linkteki shoody xml kütüphanesini yazan arkadaş esp 32 kullanmış projesinde.Bende projeyi biraz değişiklik yapıp esp 8266 için uyarlamaya çalıştım Fakat ardunio ide ''shoody xml nin esp 32 mimarisi için yazıldığını esp 8266 için uygun olmayabilir gibisinden bir uyarı mesajı verdi.Bu kütüphaneyi esp 8266 için uyarlanabilinirmi.Uzman arkadaşların önerilerini ve yardımlarını bekliyorum.

    shoody xml: https://github.com/garretlab/shoddyxml/tree/master/src

    Buda benim uyarlamaya çalıştığım proje:

    #includeAdafruit_SSD1306.h
    #include SPI.h
    #include Wire.h
    #define OLED_RESET 2
    Adafruit_SSD1306 display(OLED_RESET);

    #include Adafruit_GFX.h
    #include Adafruit_SPITFT.h
    #include Adafruit_SPITFT_Macros.h
    #include gfxfont.h

    //#include SO2002A_I2C.h oled 16x2 orjinali

    //#include WiFi.h//orjinal
    //#include WiFiMulti.h//orjinal
    #include ESP8266WiFiMulti.h
    #include ESP8266WiFi.h

    #include ESP8266HTTPClient.h
    //#include HTTPClient.hFOR ESP 32 orjinali

    #include shoddyxml.h //

    #define DISPLAY_WIDTH 128
    #define DISPLAY_HEIGHT 32

    const char *ssid = "xxxxx";
    const char *password = "xxxxxxx";
    const struct site_t {
    char *title;
    char *url;
    char *contentsToDisplay;
    } sites[] = {
    {"CNN.com", "http://rss.cnn.com/rss/edition.rss", "title"},
    {"BBC News", "http://feeds.bbci.co.uk/news/rss.xml", "description"},
    };
    const int delayPerCharacter = 200;
    const int delayPerArticle = 1000;
    const int delayPerRSS = 10000;
    const char label = 0xfc;

    int itemDepth = 0;
    int lastTagMatches = 0;
    char displayBuffer[DISPLAY_WIDTH + 1];
    char *contentsToDisplay;

    int httpGetChar();

    //WiFiMulti wifiMulti; //FOR ESP 32
    ESP8266WiFiMulti wifiMulti;
    HTTPClient http;

    WiFiClient *stream;
    //SO2002A_I2C oled(0x3c);

    shoddyxml x(httpGetChar);

    void clearDisplayBuffer() {
    for (int i = 0; i < DISPLAY_WIDTH + 1; i++) {
    displayBuffer[i] = ' ';
    }
    displayBuffer[DISPLAY_WIDTH - 1] = label;
    }

    void displayPutChar(char c) {
    displayBuffer[DISPLAY_WIDTH] = c;
    for (int i = 0; i < DISPLAY_WIDTH; i++) {
    displayBuffer[i] = displayBuffer[i + 1];
    }
    }

    void printDisplayBuffer() {
    for (int i = 0; i < DISPLAY_WIDTH; i++) {
    display.setCursor(i, 1);
    display.print(displayBuffer[i]);
    }
    }

    void foundXMLDeclOrEnd() {

    }

    void foundPI(char *s) {

    }

    void foundSTag(char *s, int numAttributes, attribute_t attributes[]) {
    if (strcmp(s, "item") == 0) {
    itemDepth++;
    }

    if (strcmp(s, contentsToDisplay) == 0) {
    lastTagMatches = 1;
    } else {
    lastTagMatches = 0;
    }
    }

    void foundETag(char *s) {
    if ((itemDepth == 1) && (strcmp(s, contentsToDisplay) == 0)) {
    for (int i = 0; i < DISPLAY_WIDTH; i++) {
    displayPutChar(' ');
    printDisplayBuffer();
    delay(delayPerCharacter);
    }

    clearDisplayBuffer();
    delay(delayPerArticle);
    }
    if (strcmp(s, "item") == 0) {
    itemDepth--;
    }
    }

    void foundEmptyElemTag(char *s, int numAttributes, attribute_t attributes[]) {

    }

    void foundCharacter(char c) {
    if ((itemDepth == 1) && (lastTagMatches == 1)) {
    displayPutChar(c);
    printDisplayBuffer();
    delay(200);
    }
    }

    void foundElement(char *s) {

    }

    int httpGetChar() {
    if (http.connected()) {
    if (stream->available()) {
    return stream->read();
    } else {
    return 0;
    }
    }
    return EOF;
    }

    void setup() {
    // put your setup code here, to run once:
    //oled.begin(DISPLAY_WIDTH, DISPLAY_HEIGHT);
    //oled.clear();
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.display();
    display.clearDisplay();

    /*
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    */

    wifiMulti.addAP(ssid, password);

    clearDisplayBuffer();

    x.foundXMLDecl = foundXMLDeclOrEnd;
    x.foundXMLEnd = foundXMLDeclOrEnd;
    x.foundPI = foundPI;
    x.foundSTag = foundSTag;
    x.foundETag = foundETag;
    x.foundEmptyElemTag = foundEmptyElemTag;
    x.foundCharacter = foundCharacter;
    x.foundElement = foundElement;
    }

    void loop() {
    for (int i = 0; i < sizeof(sites) / sizeof(struct site_t); i++) {
    if ((wifiMulti.run() == WL_CONNECTED)) {
    itemDepth = 0;
    lastTagMatches = 0;

    //oled.clear();
    //display.clearDisplay();

    display.setCursor(0, 0);
    display.print(sites[i].title);
    display.display();
    contentsToDisplay = sites[i].contentsToDisplay;
    http.begin(sites[i].url);
    int httpCode = http.GET();
    if (httpCode > 0) {
    if (httpCode == HTTP_CODE_OK) {
    stream = http.getStreamPtr();
    x.parse();
    }
    }
    http.end();
    delay(delayPerRSS);
    } else {
    wifiMulti.addAP(ssid, password);
    }
    }
    }
  • Çalışıyor mu sistem test ettiniz mi?
  • https://garretlab.web.fc2.com/en/arduino/lab/esp32_rss_reader_oled_character_display/index.html

    Test edemedim.Esp 32 kullanılmış.Bende 8266 nodemcu var.Linkten alıntı orada çalıştırmış galiba.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.