Deep interesting in CAN BUS and working in this area encourage me to make a project using CAN BUS as a medium connection between two MCU. Today, i am gonna to share DHT11 temp sensor as a transmitter and give a output to serial monitor as Receiver using MCP2515.
Interesting right?:)
Code:
Transmitter :
Interesting right?:)
Code:
Transmitter :
#include
<SPI.h> //Library for using SPI
Communication
#include
<mcp2515.h> //Library for using CAN Communication
#include
<DHT.h> //Library for using DHT sensor
#define
DHTPIN A0 //Define
DHT 11 Pin Connected to Arduino
#define
DHTTYPE DHT11 //DEFINE
DHTTYPE
struct
can_frame canMsg;
MCP2515
mcp2515(10); //Set the pin number where
SPI CS is connected (10 by default)
DHT
dht(DHTPIN, DHTTYPE); //initilize
object dht for class DHT with DHT pin with STM32 and DHT type as DHT11
void
setup()
{
while (!Serial);
Serial.begin(9600);
SPI.begin(); //Begins SPI communication
dht.begin(); //Begins to read temperature
& humidity sensor value
mcp2515.reset();
mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ);
//Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode();
}
void
loop()
{
int h = dht.readHumidity(); //Gets Humidity value
int t = dht.readTemperature(); //Gets Temperature value
canMsg.can_id
= 0x036; //CAN id as
0x036
canMsg.can_dlc = 8; //CAN data length as 8
canMsg.data[0] = h; //Update humidity value in [0]
canMsg.data[1] = t; //Update temperature value in
[1]
canMsg.data[2] = 0x00; //Rest all with 0
canMsg.data[3] = 0x00;
canMsg.data[4] = 0x00;
canMsg.data[5] = 0x00;
canMsg.data[6] = 0x00;
canMsg.data[7] = 0x00;
mcp2515.sendMessage(&canMsg); //Sends the CAN message
delay(1000);
}
Reciever:
#include
<SPI.h> //Library for
using SPI Communication
#include
<mcp2515.h> //Library for
using CAN Communication
struct
can_frame canMsg;
MCP2515
mcp2515(10); // SPI CS
Pin 10
void
setup() {
SPI.begin(); //Begins SPI
communication
Serial.begin(9600); //Begins Serial Communication
at 9600 baudrate
mcp2515.reset();
mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ);
//Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode(); //Sets CAN at normal mode
}
void
loop()
{
if (mcp2515.readMessage(&canMsg) ==
MCP2515::ERROR_OK) // To receive data (Poll Read)
{
int x = canMsg.data[0];
int y = canMsg.data[1];
Serial.print("Data from ID: 0x");
Serial.print(canMsg.can_id, HEX);
Serial.print(" ");
Serial.print("DLC : ");
Serial.print(canMsg.can_dlc);
Serial.print(" ");
Serial.print("DATA : ");
Serial.print(canMsg.data[0]);
Serial.print(" ");
Serial.print(canMsg.data[1]);
Serial.print(" ");
Serial.print(canMsg.data[2]);
Serial.print(" ");
Serial.print(canMsg.data[3]);
Serial.print(" ");
Serial.print(canMsg.data[4]);
Serial.print(" ");
Serial.print(canMsg.data[5]);
Serial.print(" ");
Serial.print(canMsg.data[6]);
Serial.print(" ");
Serial.print(canMsg.data[7]);
Serial.print("\n");
Serial.print("Current humidity =
");
Serial.print(x);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(y);
Serial.println("C ");
}
}
Output:
Comments
Post a Comment