2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5NanoC6、無線シリアルで送られた文字列をSSD1306に表示する。ESP_NOW_Serial_Class

Posted at

x 過去ログを見よ!!
x インサーネットフレームの意味が分かる人
x mac addの意味がわかる人
x mac addの宛先と自分がわかる人
x mac addの宛先を書き換えられる人
x インターネット老人会の人
x なぜかUSBシリアルの起動が失敗するので起動画面が出るまでターミナルをオンオフする
x 3.0.7

ここを都合よく書き換える


//ここは、相手先のMACアドレスを記述する。
// Set the MAC address of the device that will receive the data
// For example: XX:XX:XX:XX:XX:XX
const MacAddress peer_mac({0x48, 0x27, 0xE2, 0xE3, 0xBD, 0x50});
//const MacAddress peer_mac({0x40, 0x4C, 0xCA, 0x5A, 0xE3, 0x1C});


結果

o_coq593.jpg

o_coq594.jpg

o_coq595.jpg

o_coq596.jpg

プログラム

NanoC6(SSD1306 OLED)



//秋月のOLEDとアイテンドウのOLEDのアドレスは3C
//ESP_NOW_Serial_SSD1306_M5NanoC6_2


//インクルド
#include <Arduino.h>
#include <Wire.h>
#include "kanji1.h"

//rrrrrrrrrrrrrrrrrrrrrrrrrrrrr

#include "ESP32_NOW_Serial.h"
#include "MacAddress.h"
#include "WiFi.h"
#include "esp_wifi.h"


//rrrrrrrrrrrrrrrrrrrrrrrrrrrrr

//定義
#define MAX_PAGE                   (7)
#define MAX_COL                    (127)

#define COMMAND_MODE               0x80 // continuation bit is set!
#define DATA_MODE                  0x40

#define SET_COLUMN_ADDRESS         0x21 // takes two bytes, start address and end address of display data RAM
#define SET_PAGE_ADDRESS           0x22 // takes two bytes, start address and end address of display data RAM

#define SET_MEMORY_ADDRESSING_MODE 0x20 // takes one byte as given above
#define HORIZONTAL_ADDRESSING_MODE 0x00

//rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr


// Channel to be used by the ESP-NOW protocol
#define ESPNOW_WIFI_CHANNEL 1
#define ESPNOW_WIFI_MODE WIFI_STA     // WiFi Mode
#define ESPNOW_WIFI_IF   WIFI_IF_STA  // WiFi Interface

//ここは、相手先のMACアドレスを記述する。
// Set the MAC address of the device that will receive the data
// For example: XX:XX:XX:XX:XX:XX
const MacAddress peer_mac({0x48, 0x27, 0xE2, 0xE3, 0xBD, 0x50});
//const MacAddress peer_mac({0x40, 0x4C, 0xCA, 0x5A, 0xE3, 0x1C});

//無線のシリアル
ESP_NOW_Serial_Class NowSerial(peer_mac, ESPNOW_WIFI_CHANNEL, ESPNOW_WIFI_IF);



//rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr



//I2Cに配列を転送する
void write_s(uint8_t *str1, uint8_t len1) {

  Wire.beginTransmission(  0x3c  );

  for (int ii = 0; ii < len1; ii++) {

    //一文字出力
    Wire.write(*str1 ++);

  }//for

  Wire.endTransmission();

}//write_s


//セットページアドレス
void setPageAddress(uint8_t start, uint8_t end)
{
  uint8_t databytes[6] = {COMMAND_MODE, SET_PAGE_ADDRESS, COMMAND_MODE, start, COMMAND_MODE, end};
  write_s(databytes, 6);
}//setPageAddress


//セットカラムアクセス
void setColumnAddress(uint8_t start, uint8_t end)
{
  uint8_t databytes[6] = {COMMAND_MODE, SET_COLUMN_ADDRESS, COMMAND_MODE, start, COMMAND_MODE, end};
  write_s(databytes, 6);
}//setColumnAddress


//セットメモリーアドレシングモード
void setMemoryAddressingMode()
{
  uint8_t databytes[4] = {COMMAND_MODE, SET_MEMORY_ADDRESSING_MODE, COMMAND_MODE, HORIZONTAL_ADDRESSING_MODE};
  write_s(databytes, 4);
}//setMemoryAddressingMode

//8バイト分まとめて出力
void put8byte(int qq) {

  //データの配列の定義
  static uint8_t databytes[9] = {DATA_MODE, 0, 0, 0, 0, 0, 0, 0, 0};

  static int byte_count = 1;

  databytes[byte_count] = qq;
  byte_count++;

  if ( byte_count > 8 ) { //8バイト分、貯まったら
    write_s(databytes, 9);
    byte_count = 1;
  } // endif

} //put8byte


//ドットを打つ
void Dot(int x, int y, int c) {

  static int b_count = 0; //ビットカウント
  static int qq = 0;      //一時

  qq = qq | ( c << b_count);

  b_count++;

  if ( b_count > 7 ) { //1バイト分、貯まったら

    put8byte(qq); //SSD1306に出力

    qq = 0;
    b_count = 0;

  }//end if

}//DOt


//キャラクターRAMの内容
unsigned char st_p[4][8] = {
  //1    2    3    4    5    6    7    8
  {'N', 'o', '_', 'V', 'R', 'A', 'M', '.'  }, //1
  {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'  }, //2
  {'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'  }, //3
  {'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b'  }  //4
};

//再表示
void display(void) {

  int y; int x;
  int a; int ch;

  //範囲の設定 (OLED内部のx,yカウンターを初期化してホームポジション0,0に)
  setPageAddress(0, MAX_PAGE);  // all pages
  setColumnAddress(0, MAX_COL); // all columns

  for (int ii = 0; ii < 8192; ii++) {

    //SSD1306のバッファーの配置順のxとyを求める
    y = ((ii & 0b0001110000000000 ) >> 7) + ( ii & 0b0111);
    x =  (ii & 0b0000001111111000) >> 3;

    //↓開始 16ビット漢字のメイン処理
    ch = st_p[y >> 4][x >> 4] - ' ';     //キャラクターRAMから漢字を求める
    //座標と漢字からキャラクターパターンを求める
    a = pgm_read_word_near( ch_data7 + (y & 0x0f ) + ( ch << 4 ) ) << ( x & 0x0f);
    a = a & 0x8000;
    //↑終了

    if (a != 0) {
      Dot(x, y, 1); //白のドットを打つ
    } else {
      Dot(x, y, 0); //黒のドットを打つ
    }//end if

  }//for ii

}//display


//SSD1306の初期化
void display_begin(void) {

  //I2Cの初期化
  Wire.begin(); //M5Stamp S3
  delay(200);
  Wire.setClock(2000000); //速度の変更 (I2C高速化 2Mhz)
  delay(200);

  //SSD1306の初期化スペル(魔法)
  //0x80,0x8D,0x80,0x14,0x80,0xAF
  write_s( (uint8_t*) "\200\215\200\024\200\257", 6);
  delay(100);

  //セットメモリーアドレシングモード (画面の終端に来たら画面の先頭に)
  setMemoryAddressingMode();

}//display_begin


unsigned char *lop = st_p[0];

int kanji16_printf(char* fmt, ...) {
  char buff[256];
  va_list args;
  va_start(args, fmt);
  int return_status = vsnprintf(buff, sizeof(buff), fmt, args);
  va_end(args);
  char *s = buff;

  while ( (*s) != 0 ) {
    (*lop++) = (*s++);
  }//while

  return return_status;
}//ns_printf


void kanji16_locate(int x, int y) {

  lop = &(st_p[y][x]);

}//kanji16_locate


void kinji16_cls(void) {
  //0
  st_p[0][0] = ' '; st_p[0][1] = ' '; st_p[0][2] = ' '; st_p[0][3] = ' ';
  st_p[0][4] = ' '; st_p[0][5] = ' '; st_p[0][6] = ' '; st_p[0][7] = ' ';
  //1
  st_p[1][0] = ' '; st_p[1][1] = ' '; st_p[1][2] = ' '; st_p[1][3] = ' ';
  st_p[1][4] = ' '; st_p[1][5] = ' '; st_p[1][6] = ' '; st_p[1][7] = ' ';
  //2
  st_p[2][0] = ' '; st_p[2][1] = ' '; st_p[2][2] = ' '; st_p[2][3] = ' ';
  st_p[2][4] = ' '; st_p[2][5] = ' '; st_p[2][6] = ' '; st_p[2][7] = ' ';
  //3
  st_p[3][0] = ' '; st_p[3][1] = ' '; st_p[3][2] = ' '; st_p[3][3] = ' ';
  st_p[3][4] = ' '; st_p[3][5] = ' '; st_p[3][6] = ' '; st_p[3][7] = ' ';
}//kinji16_cls


void kinji16_cls_y(int y) {

  st_p[y][0] = ' '; st_p[y][1] = ' '; st_p[y][2] = ' '; st_p[y][3] = ' ';
  st_p[y][4] = ' '; st_p[y][5] = ' '; st_p[y][6] = ' '; st_p[y][7] = ' ';

}//kinji16_cls_y

//SSD1306に一文字を書き込む
void kinji16_ch(char ch) {

  //Serial.print(ch);
  
  static int BY = 0;
  
  if( ch == 11 ){ //ホームポジション
    lop = st_p[0];
    BY=0;
  } else if(ch == 12 ) { //クリア
    lop = st_p[0];
    kinji16_cls();
    BY=0;
  } else if(ch == 10 ) { //リターン
    BY++;
    if(BY > 3){BY = 0;}
    lop = st_p[BY];
    kinji16_cls_y(BY);
   } else {
     (*lop++) = ch;
   }//endif
}


//SSD1306に文字列を書き込む
void kinji16_print(char *str1)
{
  //文字の中身がゼロか
  while (*str1) {kinji16_ch(*str1 ++); /*一文字出力*/}
}//now_print



//oooooooooooooooooooooooooooooooooooooooo


//MACを16進に変換
char *mac_add_conv(const uint8_t *a) {

  char h[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  static char b[16 + 1];

  for(int i=0;i<6;i++){
    b[i*2+0] = h[a[i] >> 4];
    b[i*2+1] = h[a[i] & 0x0f];
  }
  b[12] = 0;

  return ( b );
  
}//mac_add_conv


//1文字の送信
void now_ch(char ch) {

  while ( !(NowSerial.availableForWrite()) ) {
    delay(5);//連続送信防止
    Serial.println(".");
  }

  if (NowSerial.write(ch) <= 0) {
    Serial.println("Failed to send data");
  }

}//now_ch


//文字列の送信
void now_print(char *str1)
{
  //文字の中身がゼロか
  while (*str1) {now_ch(*str1 ++); /*一文字出力*/}
}//now_print



//ooooooooooooooooooooooooooooooooooooooooo

//初期化
void setup() {

  //SSD1306の初期化
  display_begin();

  //再表示
  display();delay(1000);

  kinji16_cls();
  kinji16_print("OLED");
  kinji16_ch('\n');//行(10)
  kinji16_ch('\n');//行(10)

  //再表示
  display();

//yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy


  //WiFiモードとWifiチャンネルの設定
  WiFi.mode(ESPNOW_WIFI_MODE);
  WiFi.setChannel(ESPNOW_WIFI_CHANNEL, WIFI_SECOND_CHAN_NONE);

  //シリアルポートの初期化
  Serial.begin(115200);

  //WiFiの起動待ち
  for (int i = 0; i < (6+3); i++) {
    Serial.print(".");
    delay(500); //接続待ち
  }
  while (!(WiFi.STA.started())) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  //WiFiメッセージの表示
  Serial.print("to  MAC Address: " );
  Serial.println( mac_add_conv( peer_mac  ) );
  Serial.print("WiFi Mode: ");
  Serial.println("Station");
  Serial.print("Channel: ");
  Serial.println(ESPNOW_WIFI_CHANNEL);
  Serial.print("MAC Address: ");
  Serial.println(WiFi.macAddress());

  //ESP_NOW_Serialの起動
  // Start the ESP-NOW communication
  Serial.println("ESP-NOW communication starting...");
  NowSerial.begin(115200); //無線シリアル
  Serial.println("You can now send data to the peer device using the Serial Monitor.\n");



//yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

}//setup


//メインループ
void loop() {
  
  static char data[4096+1];
  int str_num = 0;

  str_num = 0;data[0]=0;
  while (NowSerial.available()) {
    //Serial.print("[");
    data[str_num] = NowSerial.read();
    str_num++;
    if( str_num > 4095 ){str_num = 4095;}
    data[str_num] = 0;
    //Serial.print("]");
  }
  //Serial.print("(");
  //Serial.print("(");
  //Serial.print(str_num);
  //Serial.print(")");

  if( str_num != 0 ){
    //Serial.print("-");
    Serial.print(data);
    kinji16_print(data);
    display();//再表示
  }
  
  //Serial.print(")");

  delay(300);
  
  
}//loop


kanji1.h





//漢字ROM
const int ch_data7[] PROGMEM = {

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //' '
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //!
0x0100, 0x0100, 0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 

0x0000, 0x0120, 0x0240, 0x0480, 0x0900, 0x0000, 0x0000, 0x0000, // "
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0440, 0x0440, 0x0440, 0x1ff0, 0x0440, 0x0440, // #
0x0440, 0x0440, 0x1ff0, 0x0440, 0x0440, 0x0440, 0x0440, 0x0000, 
0x0000, 0x0100, 0x0380, 0x0540, 0x0920, 0x0900, 0x0500, 0x0380, // $
0x0140, 0x0120, 0x0120, 0x0920, 0x0540, 0x0380, 0x0100, 0x0000, 

0x0000, 0x0000, 0x0000, 0x1810, 0x1820, 0x0040, 0x0080, 0x0100, // %
0x0200, 0x0400, 0x0830, 0x1030, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0700, 0x0880, 0x0840, 0x0840, 0x0880, 0x0500, 0x0600, // &
0x0a00, 0x1108, 0x1090, 0x10a0, 0x1040, 0x08a0, 0x0710, 0x0000, 
0x0000, 0x0300, 0x0300, 0x0100, 0x0200, 0x0000, 0x0000, 0x0000, // '
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0080, 0x0100, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, //(
0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0100, 0x0080, 0x0000, 
0x0000, 0x0200, 0x0100, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, //)
0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0100, 0x0200, 0x0000, 
0x0000, 0x0000, 0x0000, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, //*
0x0280, 0x0440, 0x0820, 0x1010, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x1ff0, //+
0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, 0x0200, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff0, //-
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //.
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0300, 0x0300, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, // /
0x0200, 0x0400, 0x0800, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x3008, 0x2808, 0x2608, //0
0x2108, 0x20c8, 0x2028, 0x2018, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0100, 0x0300, 0x0500, 0x0900, 0x0100, 0x0100, 0x0100, //1
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0fe0, 0x1010, 0x2010, 0x2008, 0x0008, 0x0010, 0x0010, //2
0x00e0, 0x0300, 0x0400, 0x0800, 0x1000, 0x2000, 0x3ff8, 0x0000, 
0x0000, 0x0fe0, 0x1010, 0x2010, 0x2008, 0x0008, 0x0010, 0x03e0, //3
0x0010, 0x0008, 0x0008, 0x2008, 0x2010, 0x1010, 0x0fe0, 0x0000, 
0x0000, 0x0030, 0x0050, 0x0090, 0x0110, 0x0210, 0x0410, 0x0810, //4
0x1010, 0x2010, 0x3ffc, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 
0x0000, 0x3ff8, 0x2000, 0x2000, 0x2000, 0x2000, 0x3fc0, 0x0020, //5
0x0010, 0x0008, 0x0008, 0x0008, 0x2010, 0x1020, 0x0fc0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2000, 0x2000, 0x27c0, 0x2820, //6
0x3010, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x1ff8, 0x0008, 0x0008, 0x0010, 0x0010, 0x0020, 0x0020, //7
0x0040, 0x0040, 0x0040, 0x0080, 0x0080, 0x0100, 0x0100, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x1010, 0x0fe0, //8
0x1010, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x1018, //9
0x0828, 0x07c8, 0x0008, 0x0008, 0x1010, 0x0820, 0x07c0, 0x0000,
0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, //:
0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, // ;
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0200, 0x0400, 0x0000, 

0x0000, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, //<
0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0020, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff0, 0x0000, // =
0x0000, 0x1ff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0800, 0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0020, //>
0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x0000, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x1010, 0x1010, 0x0010, 0x0020, //?
0x01c0, 0x0100, 0x0100, 0x0100, 0x0000, 0x0100, 0x0100, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2788, 0x2448, 0x2428, 0x2428, //@
0x2428, 0x2428, 0x2428, 0x2428, 0x13f8, 0x0800, 0x07e0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x2008, //A
0x3ff8, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2010, 0x2020, 0x3fc0, //B
0x2020, 0x2010, 0x2008, 0x2008, 0x2010, 0x2020, 0x3fc0, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2000, 0x2000, //C
0x2000, 0x2000, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2008, 0x2008, 0x2008, //D
0x2008, 0x2008, 0x2008, 0x2008, 0x2010, 0x2020, 0x3fc0, 0x0000, 
0x0000, 0x3ff8, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3fe0, //E
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3ff8, 0x0000, 
0x0000, 0x3ff8, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3fe0, //F
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2000, 0x2000, //G
0x20f8, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x3ff8, //H
0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x0000, 
0x0000, 0x1ff0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //I
0x0100, 0x0100, 0x0100, 0x0100, 0x1ff0, 0x0000, 0x0000, 0x0000, 
0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, //J
0x0008, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x2008, 0x2030, 0x2040, 0x2180, 0x2200, 0x2c00, 0x3000, //K
0x2800, 0x2600, 0x2100, 0x2080, 0x2060, 0x2010, 0x2008, 0x0000, 
0x0000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, //L
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x3ff8, 0x0000, 
0x0000, 0x2008, 0x3018, 0x2828, 0x2448, 0x2288, 0x2108, 0x2008, //M
0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x0000, 
0x0000, 0x2008, 0x3008, 0x2808, 0x2808, 0x2408, 0x2208, 0x2108, //N
0x2108, 0x2088, 0x2048, 0x2028, 0x2028, 0x2018, 0x2008, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x2008, //O
0x2008, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2008, 0x2010, 0x2020, //P
0x3fc0, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 
0x0000, 0x07c0, 0x0820, 0x1010, 0x2008, 0x2008, 0x2008, 0x2008, //Q
0x2008, 0x2008, 0x2088, 0x2048, 0x1028, 0x0810, 0x07e8, 0x0000, 
0x0000, 0x3fc0, 0x2020, 0x2010, 0x2008, 0x2008, 0x2010, 0x2020, //R
0x3fc0, 0x2080, 0x2040, 0x2040, 0x2020, 0x2020, 0x2010, 0x0000, 
0x0000, 0x0fe0, 0x1010, 0x2000, 0x2000, 0x2000, 0x1000, 0x0fe0, //S
0x0010, 0x0008, 0x0008, 0x0008, 0x1008, 0x0810, 0x07e0, 0x0000, 
0x0000, 0x3ff8, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //T
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, //U
0x2008, 0x2008, 0x2008, 0x2008, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, //V
0x2008, 0x2008, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0000, 
0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, //W
0x2008, 0x2108, 0x2288, 0x2448, 0x2828, 0x3018, 0x2008, 0x0000, 
0x0000, 0x0000, 0x2008, 0x2008, 0x1010, 0x0820, 0x0440, 0x0280, //X
0x0100, 0x0280, 0x0440, 0x0820, 0x1010, 0x2008, 0x2008, 0x0000, 
0x0000, 0x2008, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0100, //Y
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0xfff8, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, //Z
0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0xfff8, 0x0000, 0x0000, 

0x0000, 0x0380, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, // [
0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0380, 0x0000, 
0x0000, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0100, 0x0fe0, // ¥
0x0100, 0x0100, 0x0fe0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0380, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, // ]
0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0380, 0x0000, 
0x0000, 0x0100, 0x0280, 0x0440, 0x0820, 0x0000, 0x0000, 0x0000, // ^
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //_
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff8, 0x0000, 

0x0000, 0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0000, 0x0000, // `
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 

0x0000, 0x0000, 0x0000, 0x0fc0, 0x0020, 0x0010, 0x0010, 0x07d0, //a
0x0830, 0x1010, 0x1010, 0x1010, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x17c0, 0x1820, //b
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1020, 0x1fc0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, //c
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x07d0, 0x0830, //d
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0810, 0x07f0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, //e
0x1010, 0x1010, 0x1ff0, 0x1000, 0x1000, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x01c0, 0x0200, 0x0200, 0x0400, 0x0400, 0x1fc0, 0x0400, //f
0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0000, 
0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, 0x1010, 0x1010, 0x1010, //g
0x1010, 0x1010, 0x0830, 0x07d0, 0x0010, 0x0020, 0x0fc0, 0x0000, 
0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, //h
0x1fc0, 0x1020, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000, 0x0100, 0x0100, //i
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, //j
0x0010, 0x0010, 0x0010, 0x1010, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x1000, 0x1000, 0x1000, 0x1040, 0x1080, 0x1100, 0x1200, //k
0x1400, 0x1800, 0x1400, 0x1200, 0x1100, 0x1080, 0x1040, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, //l
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3fe0, 0x2110, //m
0x2108, 0x2108, 0x2108, 0x2108, 0x2108, 0x2108, 0x2108, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1fc0, 0x1020, //n
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, //o
0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x0820, 0x07c0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, 0x1010, //p
0x1010, 0x1010, 0x1010, 0x1010, 0x1820, 0x17c0, 0x1000, 0x1000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07c0, 0x0820, 0x1010, //q
0x1010, 0x1010, 0x1010, 0x1010, 0x0830, 0x07d0, 0x0010, 0x0010, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x17c0, 0x1820, //r
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x07e0, 0x0800, 0x1000, 0x1000, //s
0x0800, 0x07c0, 0x0020, 0x0010, 0x0010, 0x0020, 0x0fc0, 0x0000, 
0x0000, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x1fe0, 0x0200, //t
0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x01c0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, //u
0x1010, 0x1010, 0x1010, 0x1010, 0x0810, 0x0410, 0x03f0, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, //v
0x1010, 0x1010, 0x1010, 0x0820, 0x0440, 0x0280, 0x0100, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x2008, 0x2008, 0x2008, 0x2008, //w
0x2008, 0x2108, 0x2288, 0x2448, 0x2828, 0x3018, 0x2008, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x2008, 0x1010, 0x0820, 0x0440, //x
0x0280, 0x0100, 0x0280, 0x0440, 0x0820, 0x1010, 0x2008, 0x0000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x1010, 0x1010, 0x1010, 0x1010, //y
0x0820, 0x0440, 0x0280, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1ff0, 0x0020, //z
0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1ff0, 0x0000, 

0x0000, 0x0080, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0200, // {
0x0200, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0080, 0x0000, 
0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, // |
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 
0x0000, 0x0200, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0080, // }
0x0080, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0200, 0x0000, 
0x0000, 0x0220, 0x0540, 0x0880, 0x0000, 0x0000, 0x0000, 0x0000, // ~
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x0000, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, //■
0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc 


};


StampS3 ハローワールドと出力




//ESP_NOW_Serial_Hello_M5StampS3_1


//インクルド
#include "ESP32_NOW_Serial.h"
#include "MacAddress.h"
#include "WiFi.h"
#include "esp_wifi.h"


//定義
// Channel to be used by the ESP-NOW protocol
#define ESPNOW_WIFI_CHANNEL 1
#define ESPNOW_WIFI_MODE WIFI_STA     // WiFi Mode
#define ESPNOW_WIFI_IF   WIFI_IF_STA  // WiFi Interface

//ここは、相手先のMACアドレスを記述する。
// Set the MAC address of the device that will receive the data
// For example: XX:XX:XX:XX:XX:XX
//const MacAddress peer_mac({0x48, 0x27, 0xE2, 0xE3, 0xBD, 0x50});
const MacAddress peer_mac({0x40, 0x4C, 0xCA, 0x5A, 0xE3, 0x1C});

//無線のシリアル
ESP_NOW_Serial_Class NowSerial(peer_mac, ESPNOW_WIFI_CHANNEL, ESPNOW_WIFI_IF);


//MACを16進に変換
char *mac_add_conv(const uint8_t *a) {

  char h[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  static char b[16 + 1];

  for(int i=0;i<6;i++){
    b[i*2+0] = h[a[i] >> 4];
    b[i*2+1] = h[a[i] & 0x0f];
  }
  b[12] = 0;

  return ( b );
  
}//mac_add_conv


//1文字の送信
void now_ch(char ch) {

  while ( !(NowSerial.availableForWrite()) ) {
    delay(5);//連続送信防止
    Serial.println(".");
  }

  if (NowSerial.write(ch) <= 0) {
    Serial.println("Failed to send data");
  }

}//now_ch


//文字列の送信
void now_print(char *str1)
{
  //文字の中身がゼロか
  while (*str1) {now_ch(*str1 ++); /*一文字出力*/}
}//now_print


//初期化
void setup() {

  //WiFiモードとWifiチャンネルの設定
  WiFi.mode(ESPNOW_WIFI_MODE);
  WiFi.setChannel(ESPNOW_WIFI_CHANNEL, WIFI_SECOND_CHAN_NONE);

  //シリアルポートの初期化
  Serial.begin(115200);

  //WiFiの起動待ち
  for (int i = 0; i < (6+3); i++) {
    Serial.print(".");
    delay(500); //接続待ち
  }
  while (!(WiFi.STA.started())) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  //WiFiメッセージの表示
  Serial.print("to  MAC Address: " );
  Serial.println( mac_add_conv( peer_mac  ) );
  Serial.print("WiFi Mode: ");
  Serial.println("Station");
  Serial.print("Channel: ");
  Serial.println(ESPNOW_WIFI_CHANNEL);
  Serial.print("MAC Address: ");
  Serial.println(WiFi.macAddress());

  //ESP_NOW_Serialの起動
  // Start the ESP-NOW communication
  Serial.println("ESP-NOW communication starting...");
  NowSerial.begin(115200); //無線シリアル
  Serial.println("You can now send data to the peer device using the Serial Monitor.\n");

}//setup


//メインループ
void loop() {

  now_print("Hello,\n");
  now_print("world!\n");

  delay(1000);//1秒待つ
}//loop



2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?