1

I try to display the transmitted information from CAN bus on ESP32 web server. I saved the CAN.read() in a buffer receivedChars[i] and try to display the data by client.println(receivedChars[i]);}. However, nothing shows on the webserver... The complete code shows below,

// Copyright (c) Sandeep Mistry. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
#include <CAN.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Replace with your network credentials
const char* ssid = "NGW_2.4G";
const char* password = "NextGW2018";
// Set webserver port number to 80
WiFiServer server(80);
// Variable to store the HTTP request
String header;
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
 Serial.begin(115200);
 while (!Serial);
 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
 Serial.println(F("SSD1306 allocation failed"));
 for (;;);
 }
 delay(2000);
 display.clearDisplay();
 display.setTextColor(WHITE);
 Serial.println("CAN Receiver");
 CAN.setPins(16, 17);
 // start the CAN bus at 500 kbps
 if (!CAN.begin(500E3)) {
 Serial.println("Starting CAN failed!");
 while (1);
 }
 // Connect to Wi-Fi network with SSID and password
 Serial.print("Connecting to ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 }
 // Print local IP address and start web server
 Serial.println("");
 Serial.println("WiFi connected.");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
 server.begin();
}
void loop() {
 char receivedChars[10];
 // try to parse packet
 int packetSize = CAN.parsePacket();
 if (packetSize) {
 // received a packet
 Serial.print("Received ");
 if (CAN.packetExtended()) {
 Serial.print("extended ");
 }
 if (CAN.packetRtr()) {
 // Remote transmission request, packet contains no data
 Serial.print("RTR ");
 }
 Serial.print("packet with id 0x");
 Serial.print(CAN.packetId(), HEX);
 if (CAN.packetRtr()) 
 {
 Serial.print(" and requested length ");
 Serial.println(CAN.packetDlc());
 } 
 else 
 {
 Serial.print(" and length ");
 Serial.println(packetSize);
 // only print packet data for non-RTR packets
 while (CAN.available()) 
 {
 for (int i=0; i<5; i++) 
 {
 receivedChars[i] = (char)CAN.read(); 
 Serial.print(receivedChars[i]);
 } 
 }
 Serial.println();
 }
 Serial.println();
 }
 WiFiClient client = server.available(); // Listen for incoming clients
 if (client) { // If a new client connects,
 Serial.println("New Client."); // print a message out in the serial port
 String currentLine = ""; // make a String to hold incoming data from the client
 while (client.connected()) { // loop while the client's connected
 if (client.available()) { // if there's bytes to read from the client,
 char c = client.read(); // read a byte, then
 Serial.write(c); // print it out the serial monitor
 header += c;
 if (c == '\n') { // if the byte is a newline character
 // if the current line is blank, you got two newline characters in a row.
 // that's the end of the client HTTP request, so send a response:
 if (currentLine.length() == 0) {
 // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
 // and a content-type so the client knows what's coming, then a blank line:
 client.println("HTTP/1.1 200 OK");
 client.println("Content-type:text/html");
 client.println("Connection: close");
 client.println();
 // Display the HTML web page
 client.println("<!DOCTYPE html><html>");
 client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
 client.println("<link rel=\"icon\" href=\"data:,\">");
 // CSS to style the table 
 client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}");
 client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }");
 client.println("th { padding: 12px; background-color: #0043af; color: white; }");
 client.println("tr { border: 1px solid #ddd; padding: 12px; }");
 client.println("tr:hover { background-color: #bcbcbc; }");
 client.println("td { border: none; padding: 12px; }");
 client.println(".sensor { color:white; font-weight: bold; background-color: #bcbcbc; padding: 1px; }");
 // Web Page Heading
 client.println("</style></head><body><h1>Can bus</h1>");
 client.println("<tr><td>text: </td><td><span class=\"sensor\">");
 for (int i=0; i<5; i++) 
 {
 receivedChars[i] = (char)CAN.read();
 client.println(receivedChars[i]); 
 } 
 client.println(" .</span></td></tr>"); 
 // The HTTP response ends with another blank line
 client.println();
 // Break out of the while loop
 break;
 } else { // if you got a newline, then clear currentLine
 currentLine = "";
 }
 } else if (c != '\r') { // if you got anything else but a carriage return character,
 currentLine += c; // add it to the end of the currentLine
 }
 }
 }
 // Clear the header variable
 header = "";
 // Close the connection
 client.stop();
 Serial.println("Client disconnected.");
 Serial.println("");
 }
}
asked Mar 3, 2020 at 1:11

1 Answer 1

1

It looks like the CAN-BUS can not be activated in web server session, I save the transmitted information in a buffer before starting the web server session, and print out the information from the buffer.

answered Mar 9, 2020 at 11:54

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.