IOXESP32
  • รู้จักกับ IOXESP32 / IOXESP32U
  • รู้จักกับ IOXESP32PS
  • รู้จักกับ IOXESP32+
  • การใช้งาน IOXESP32 กับ ArduinoIDE
  • การใช้งาน IOXESP32 กับ MicroPython
  • การใช้งาน IOXESP32 เขียนโปรแกรมด้วยบล็อก
  • การใช้งาน IOXESP32 ร่วมกับ microBlock IDE
  • วาดวงจรบอร์ด IOXESP32 ด้วยโปรแกรม Fritzing
  • IOXESP32 Audio shield
    • รู้จักกับ IOXESP32 Audio shield
    • รู้จักกับ IOXESP32 Audio shield V2
    • การต่อ IOXESP32 Audio shield เข้ากับบอร์ด IOXESP32
    • การเตรียม IOXESP32 Audio shield ให้พร้อมเขียนโปรแกรมสั่งงาน
    • การใช้งาน IOXESP32 Audio shield กับ ArduinoIDE
    • การใช้งาน IOXESP32 Audio shield ทำลำโพงบลูทูธ
  • IOXESP32 Ethernet shield
    • รู้จักกับ IOXESP32 Ethernet shield
    • การต่อ IOXESP32 Ethernet shield เข้ากับบอร์ด IOXESP32
    • การเตรียม IOXESP32 Ethernet shield ให้พร้อมเขียนโปรแกรมสั่งงาน
    • การใช้งาน IOXESP32 Ethernet shield กับ ArduinoIDE
  • IOXESP32 Mini LCD shield
    • รู้จักกับ IOXESP32 Mini LCD shield
    • การต่อ IOXESP32 Mini LCD shield เข้ากับบอร์ด IOXESP32
    • การใช้งาน IOXESP32 Mini LCD shield กับ ArduinoIDE
  • IOXESP32 Battery shield
    • รู้จักกับ IOXESP32 Battery shield
    • การต่อ IOXESP32 Battery shield เข้ากับบอร์ด IOXESP32
    • การต่อแบตเตอรี่เข้ากับ IOXESP32 Battery shield
    • การใช้งาน IOXESP32 Battery shield กับ ArduinoIDE
  • IOXESP32 4-Digit shield
    • รู้จักกับ IOXESP32 4-Digit shield
    • การต่อ IOXESP32 4-Digit shield เข้ากับบอร์ด IOXESP32
    • การใช้งาน IOXESP32 4-Digit shield กับ ArduinoIDE
  • IOXESP32 DotMatrix shield
    • รู้จักกับ IOXESP32 DotMatrix shield
    • การต่อ IOXESP32 DotMatrix shield เข้ากับบอร์ด IOXESP32
    • การใช้งาน IOXESP32 DotMatrix shield กับ ArduinoIDE
  • IOXESP32 Power Shield
    • รู้จักกับ IOXESP32 Power shield
    • รู้จักกับ IOXESP32 Power shield V2
    • การต่อ IOXESP32 Power shield เข้ากับบอร์ด IOXESP32
    • การจ่ายไฟเข้าบอร์ด IOXESP32 ผ่าน IOXESP32 Power shield
  • IOXESP32 Modbus RTU shield / Lite
    • รู้จักกับ IOXESP32 Modbus RTU shield
    • รู้จักกับ IOXESP32 Modbus RTU shield (Lite)
    • การต่อ IOXESP32 Modbus RTU shield / Lite เข้ากับบอร์ด IOXESP32
    • การใช้งาน IOXESP32 Modbus RTU shield / Lite กับโมดูล XY-MD02 วัดอุณหภูมิและความชื้น
    • การใช้งาน IOXESP32 Modbus RTU shield / Lite กับบอร์ดรีเลย์ Modbus RTU/RS485 4 ช่อง 12V
  • IOXESP32 CAN Bus shield
    • รู้จักกับ IOXESP32 CAN Bus shield
    • การต่อ IOXESP32 CAN Bus shield เข้ากับบอร์ด IOXESP32
    • การสื่อสารระหว่าง ESP32 กับ Arduino Uno ผ่าน CAN bus เบื้องต้น
  • IOXESP32 4-20mA Receiver shield
    • รู้จักกับ IOXESP32 4-20mA Receiver shield
    • การต่อ IOXESP32 4-20mA Receiver shield เข้ากับบอร์ด IOXESP32
    • การต่อ IOXESP32 4-20mA Receiver shield เข้ากับเซ็นเซอร์ 4-20mA
    • การใช้ IOXESP32 4-20mA Receiver shield อ่านค่าสัญญาณ 4-20mA
  • IOXESP32 Motor shield
    • รู้จักกับ IOXESP32 Motor shield
    • การต่อ IOXESP32 Motor shield เข้ากับบอร์ด IOXESP32
    • การต่อวงจรมอเตอร์เข้ากับ IOXESP32 Motor shield
    • การใช้งาน IOXESP32 Motor shield กับ Arduino IDE
  • IOXESP32 Display Adapter shield
    • รู้จักกับ IOXESP32 Display Adapter shield
    • การต่อ IOXESP32 Display Adapter shield เข้ากับบอร์ด IOXESP32
    • การต่อ IOXESP32 Display Adapter shield เข้ากับจอ TFT LCD
    • การตั้งค่าไลบรารี่ TFT_eSPI
      • การใช้งานจอ LCD TFT ร่วมกับ ESP32 ด้วยไลบรารี่ TFT_eSPI
  • IOXESP32 HUB75 Matrix Panel shield
    • รู้จักกับ IOXESP32 HUB75 Matrix Panel shield
    • การต่อใช้งาน IOXESP32 HUB75 Matrix Panel shield
    • การเขียนโปรแกรมสั่งงานจอ P4/P5/P10 RGB Matrix Panel
  • IOXESP32 I/O shield
    • รู้จักกับ IOXESP32 I/O shield
    • การต่อ IOXESP32 I/O shield เข้ากับบอร์ด IOXESP32
    • การใช้งาน IOXESP32 I/O shield ต่ออุปกรณ์ภายนอก
  • IOXESP32 Base
    • รู้จักกับ IOXESP32 Dual Base
    • รู้จักกับ IOXESP32 Triple Base
    • รู้จักกับ IOXESP32 Proto Base
    • รู้จักกับ IOXESP32 Main Power Base
  • โครงงาน
    • สร้างเกมนกหลบท่อด้วยแพลตฟอร์ม IOXESP32
Powered by GitBook
On this page
  • รับ-ส่งข้อความ Hello ผ่าน CAN bus
  • รับ-ส่งค่าแอนะล็อกผ่าน CAN bus

Was this helpful?

  1. IOXESP32 CAN Bus shield

การสื่อสารระหว่าง ESP32 กับ Arduino Uno ผ่าน CAN bus เบื้องต้น

ใช้บอร์ด IOXESP32 + IOXESP32 CAN Bus shield ต่อเข้ากับ Arduino Uno + MCP2515 รับ-ส่งข้อมูลเบื้องต้น

Previousการต่อ IOXESP32 CAN Bus shield เข้ากับบอร์ด IOXESP32Nextรู้จักกับ IOXESP32 4-20mA Receiver shield

Last updated 4 years ago

Was this helpful?

รับ-ส่งข้อความ Hello ผ่าน CAN bus

หัวข้อนี้ทดลองใช้ Arduino Uno สื่อสารกับ ESP32 ผ่าน CAN bus แต่เนื่องจากบอร์ด Arduino Uno ไม่รองรับการสื่อสารผ่าน CAN จึงจำเป็นต้องใช้ มาเป็นตัวกลาง ส่วนฝั่งบอร์ด IOXESP32 ใช้ เป็นตัวกลาง

ให้ต่อวงจรดังนี้

จะได้ไฟล์ไลบารี่นามสกุล .zip มา ให้กด Sketch > Include Library เลือก Add .ZIP Library...

เลือกไฟล์ไลบารี่ได้ที่ได้ดาวน์โหลดมา แล้วกด Open

เมื่อติดตั้งเสร็จแล้ว โปรแกรม ArduinoIDE แจ้งเตือนดังรูป

ให้อัพโหลดโค้ดโปรแกรมต่อไปนี้ลงบอร์ด Arduino

#include <SPI.h>
#include <mcp2515.h>
 
MCP2515 mcp2515(10);

void setup() {
  Serial.begin(115200);
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}
 
void loop() {
  char *text = "Hello!";
  
  struct can_frame frame;
  frame.can_id = 0x7FF;
  frame.can_dlc = strlen(text);
  strcpy(frame.data, text);

  mcp2515.sendMessage(&frame);

  Serial.print("Send '");
  Serial.print(text);
  Serial.println("' via CAN bus");
  delay(500);
}

และอัพโหลดโค้ดโปรแกรมต่อไปนี้ลงบอร์ด ESP32

#include "driver/gpio.h"
#include "driver/can.h"

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

  //Initialize configuration structures
  can_general_config_t g_config =  {
    .mode = CAN_MODE_NORMAL,
    .tx_io = GPIO_NUM_26,
    .rx_io = GPIO_NUM_27,
    .clkout_io = (gpio_num_t)CAN_IO_UNUSED,
    .bus_off_io = (gpio_num_t)CAN_IO_UNUSED,
    .tx_queue_len = 5,
    .rx_queue_len = 5,
    .alerts_enabled = CAN_ALERT_NONE,
    .clkout_divider = 0
  };

  can_timing_config_t t_config = CAN_TIMING_CONFIG_125KBITS();
  can_filter_config_t f_config = CAN_FILTER_CONFIG_ACCEPT_ALL();

  //Install CAN driver
  if (can_driver_install(&g_config, &t_config, &f_config) == ESP_OK) {
    printf("Driver installed\n");
  } else {
    printf("Failed to install driver\n");
    return;
  }

  //Start CAN driver
  if (can_start() == ESP_OK) {
    printf("Driver started\n");
  } else {
    printf("Failed to start driver\n");
    return;
  }
}

void loop() {
  //Wait for message to be received
  can_message_t message;
  if (can_receive(&message, pdMS_TO_TICKS(10000)) == ESP_OK) {
    printf("Message received\n");
  } else {
    printf("Failed to receive message\n");
    return;
  }

  char text[8];
  memset(text, 0, 8);
  memcpy(text, message.data, message.data_length_code);
  Serial.print(">>> ");
  Serial.println(text);
}

เปิด Serial Monitor ขึ้นมา จะพบว่าบอร์ด Arduino Uno สามารถส่งข้อมูลไปยังบอร์ด ESP32 ผ่าน CAN bus ได้แล้ว

รับ-ส่งค่าแอนะล็อกผ่าน CAN bus

หัวข้อนี้ใช้ Arduino Uno อ่านค่าแอนะล็อกจากวอลุ่ม จากนั้นส่งค่าแอนะล็อกที่อ่านได้ให้ ESP32 แล้วแสดงผลใน Serial Monitor เป็นตัวอย่างการใช้บอร์ด Arduino Uno ช่วยขยายขาต่อใช้งานให้ ESP32

ให้ต่อวงจรดังนี้

ที่ฝั่ง Arduino Uno ให้อัพโหลดโค้ดโปรแกรมต่อไปนี้

#include <SPI.h>
#include <mcp2515.h>
 
MCP2515 mcp2515(10);
 
void setup() {
  Serial.begin(115200);
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();

  Serial.println("------- CAN ----------");
}
 
void loop() {
  uint16_t adc = analogRead(A0);
  
  struct can_frame frame;
  frame.can_id = 0x7FF;
  frame.can_dlc = 2;
  frame.data[0] = adc >> 8;
  frame.data[1] = adc & 0xFF;

  mcp2515.sendMessage(&frame);
  delay(50);
}

ที่ฝั่งบอร์ด ESP32 ให้อัพโหลดโปรแกรมต่อไปนี้

#include "driver/gpio.h"
#include "driver/can.h"

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

  //Initialize configuration structures
  can_general_config_t g_config =  {
    .mode = CAN_MODE_NORMAL,
    .tx_io = GPIO_NUM_26,
    .rx_io = GPIO_NUM_27,
    .clkout_io = (gpio_num_t)CAN_IO_UNUSED,
    .bus_off_io = (gpio_num_t)CAN_IO_UNUSED,
    .tx_queue_len = 5,
    .rx_queue_len = 5,
    .alerts_enabled = CAN_ALERT_NONE,
    .clkout_divider = 0
  };

  can_timing_config_t t_config = CAN_TIMING_CONFIG_125KBITS();
  can_filter_config_t f_config = CAN_FILTER_CONFIG_ACCEPT_ALL();

  //Install CAN driver
  if (can_driver_install(&g_config, &t_config, &f_config) == ESP_OK) {
    printf("Driver installed\n");
  } else {
    printf("Failed to install driver\n");
    return;
  }

  //Start CAN driver
  if (can_start() == ESP_OK) {
    printf("Driver started\n");
  } else {
    printf("Failed to start driver\n");
    return;
  }
}

void loop() {
  //Wait for message to be received
  can_message_t message;
  if (can_receive(&message, pdMS_TO_TICKS(10000)) == ESP_OK) {
    printf("Message received\n");
  } else {
    printf("Failed to receive message\n");
    return;
  }

  uint16_t adc = (message.data[0] << 8) | message.data[1];
  Serial.println(adc);
}

เปิด Serial Monitor ฝั่ง ESP32 ขึ้นมา จะพบว่าฝั่ง ESP32 สามารถรับค่าแอนะล็อกที่ส่งผ่าน CAN bus มาได้แล้ว

แก้ไขโค้ดโปรแกรมเล็กน้อย ให้ IOXESP32 แสดงผลค่าที่อ่านได้บน 4-Digit shield ได้ผลตามวีดีโอด้านล่างนี้

ให้ติดตั้งไลบารี่ MCP2515 โดยเข้าไปที่ กดปุ่ม Code เลือก Download ZIP

https://github.com/autowp/arduino-mcp2515
โมดูล MCP2515
IOXESP32 CAN Bus shield