J'ai actuellement un projet très basique : j'utilise un module NRF24L01 (SPI) et un écran SSD1306 (SDA/SCL). Mon montage est la somme des deux schémas suivants :
- Presque tout fonctionne bien : l'affichage à l'écran ( même un bitmap ) et l'envois d'un message.
( je reçois le message intègre sur un autre montage ) - Cependant lorsque je reçois le message de l'autre montage, j'ai un message vide
( radio.available() fonctionne bien, c'est vraiment le buffer qui est vide ) . - Ce n'est pas tout, le problème disparait si et seulement si j'enlève la ligne
````display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);```
Quand je n'initialise pas l'écran, je reçois bien le message de l'autre montage.
Je pense qu'il s'agit d'un conflit de librairies j'ai tenté de les mettre à jour, j'ai installé une variante de la librairie RF24, sans résultat. Ci-dessous mon script :
#include <Wire.h>
#include <SPI.h>
#include <RF24.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <avr/pgmspace.h>
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_ADDR 0x3C
#include <String.h>
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);
RF24 radio(6, 7); // CE, CSN
const byte addressExtra[6] = "00001";
const byte addressIntra[6] = "00002";
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long timeout = 1000;
String strSerial; // entree utilisateur
String strCommand; // entree utilisateur
String strDownData; // entree utilisateur
#define bitmap_height 128
#define bitmap_width 64
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(">>SERVER SIDE<<");
display.display();
Serial.begin(9600);while (!Serial) delay(10);
Serial.setTimeout(10);
for(int i = 0; i <= 20; i++){Serial.println();}
Serial.println("+-----------[ SERVER SIDE ]---------------+");
delay(100);
display.println("[+] Starting radio");
display.display();
delay(100);
if (radio.begin()) {
Serial.println("[+] RADIO : OK");
display.println("[+] Success !");
}else {
display.println("[!] Error ");
Serial.println("[-] RADIO : ERROR");}
display.display();
radio.openWritingPipe(addressExtra);
radio.openReadingPipe(0, addressIntra);
radio.setPALevel(RF24_PA_HIGH);
radio.stopListening();
}
String send( char * charCommand ){
Serial.print("[SEND]:[");
Serial.print(charCommand );
Serial.print("]");
// mode emetteur
radio.write(&charCommand, sizeof(charCommand)); Serial.print("-->[SNT]");
// attente de réponse
radio.startListening(); Serial.print("-->[ME]");
prevMillis = millis();
while (!radio.available() && (millis()-prevMillis)<timeout) {};
if (radio.available())
{
Serial.print("-->[REP] : [");
char downData[255] = "";
radio.read(&downData, sizeof(downData));
strDownData = String(downData);
Serial.println( strDownData + "]");
radio.stopListening();
return strDownData;
} else {
Serial.print("-->[T.O]");
radio.stopListening();
return "";
}
}
void loop() {
if(Serial.available()){
// lecture de l'entrée du port serial
strCommand = Serial.readString();
// convertion en char
char charCommand[strCommand.length()+1];
strCommand.toCharArray(charCommand, strCommand.length());
//protocole
send(charCommand);
}
}