Navigation

    M5Stack Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. cepics
    3. Topics
    C
    • Continue chat with cepics
    • Start new chat with cepics
    • Flag Profile
    • Profile
    • Following
    • Followers
    • Blocks
    • Topics
    • Posts
    • Best
    • Groups

    Topics created by cepics

    • C

      lovyan launcher doesn't compile on M5Stack basic
      Arduino • • cepics

      4
      0
      Votes
      4
      Posts
      1382
      Views

      C

      yes!!
    • C

      <SOLVED> M5Stack basic vs gray and SD card
      Arduino • • cepics

      6
      0
      Votes
      6
      Posts
      1892
      Views

      B

      Glad to hear it worked for you too!
    • C

      SD mount fail on M5Stack basic
      Arduino • • cepics

      2
      0
      Votes
      2
      Posts
      1015
      Views

      C

      the first sketch works, with M5Stack basic, if I modify the M5Stack.cpp library from: // TF Card if (SDEnable == true) { SD.begin(TFCARD_CS_PIN, SPI, 40000000); } to // TF Card if (SDEnable == true) { SD.begin(TFCARD_CS_PIN, SPI, 10000000); }
    • C

      upload code to STAMP PWR485
      Cores • • cepics

      4
      0
      Votes
      4
      Posts
      2209
      Views

      Hello @cepics according to the schematic both ports are connected in parallel - no need to select one (or the other). Thanks Felix
    • C

      analogread and wifi.h on m5Stick (gray)
      M5 Stick/StickC • • cepics

      2
      0
      Votes
      2
      Posts
      1483
      Views

      No one has replied

    • C

      ATOM Lite Display not display in smallHd 503
      Atom • • cepics

      4
      0
      Votes
      4
      Posts
      2536
      Views

      C

      from SmallHD503 datasheet: HDMI Input Types YCC 4:2:2 @ 8 bits, 8/10/12 bit color in RGB & YCC 4:4:4: 1080p60, 1080p59.94, 1080p50, 1080p30, 1080p29.97 1080p25, 1080p24, 1080p23.98,1080i60, 1080i59.94, 1080i50, 1080i30, 1080i29.97, 1080i25, 720p120, 720p119.88, 720p100, 720p60, 720p59.94 , 720p50, 720p30, 720p29.97, 720p25, 720p24, 720p23.98, 480p120, 480p119.88, 480p60, 480p59.94, 576p100, 576p50, 480i240, 480i239.76, 480i120, 480i119.88, 480i60, 480i59.94, 480i30, 480i29.97, 480i24, 480i23.98, 576i200, 576i100, 576i50, 576i25
    • C

      M5UnitOLED with U8g2 Library
      Arduino • • cepics

      2
      0
      Votes
      2
      Posts
      1647
      Views

      C

      noOne?
    • C

      How to use 7 seg font with M5UnitOLED.h
      Arduino • • cepics

      1
      0
      Votes
      1
      Posts
      2067
      Views

      No one has replied

    • C

      (SOLVED) Change I2C pin in M5GFX Library (to use With ATOM LITE)
      Arduino • • cepics

      6
      0
      Votes
      6
      Posts
      6653
      Views

      C

      @m5stack said in Change I2C pin in M5GFX Library (to use With ATOM LITE): if you wanna change the I2C pin. you could use this code. #include <M5UnitOLED.h> //M5UnitOLED display; // default setting M5UnitOLED display ( 21, 22, 400000 ); // SDA, SCL, FREQ tnks a lot !!!
    • C

      [SOLVED] ATOM LITE + OLED Unit 1.3" 128 × 64 Display
      Atom • • cepics

      15
      0
      Votes
      15
      Posts
      13398
      Views

      C

      tnks a lot !!!! this sketch is working for me #include <M5UnitOLED.h> M5UnitOLED display ( 26, 32, 400000 ); // SDA, SCL, FREQ M5Canvas canvas(&display); static constexpr char text[] = "Hello world ! こんにちは世界! this is long long string sample. 寿限無、寿限無、五劫の擦り切れ、海砂利水魚の、水行末・雲来末・風来末、喰う寝る処に住む処、藪ら柑子の藪柑子、パイポ・パイポ・パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの、長久命の長助"; static constexpr size_t textlen = sizeof(text) / sizeof(text[0]); int textpos = 0; int scrollstep = 2; void setup(void) { display.begin(); if (display.width() < display.height()) { display.setRotation(display.getRotation() ^ 1); } canvas.setColorDepth(1); // mono color canvas.setFont(&fonts::lgfxJapanMinchoP_32); canvas.setTextWrap(false); canvas.setTextSize(2); canvas.createSprite(display.width() + 64, 72); } void loop(void) { int32_t cursor_x = canvas.getCursorX() - scrollstep; if (cursor_x <= 0) { textpos = 0; cursor_x = display.width(); } canvas.setCursor(cursor_x, 0); canvas.scroll(-scrollstep, 0); while (textpos < textlen && cursor_x <= display.width()) { canvas.print(text[textpos++]); cursor_x = canvas.getCursorX(); } display.waitDisplay(); canvas.pushSprite(&display, 0, (display.height() - canvas.height()) >> 1); }
    • C

      power M5Stack Gray core from a pair of 18650 batteries
      M5stack Grey • • cepics

      3
      0
      Votes
      3
      Posts
      3733
      Views

      C

      tnks for answering,
    • C

      Neoflash HAT
      M5 Stick/StickC • • cepics

      2
      0
      Votes
      2
      Posts
      2978
      Views

      S

      A year ago? It looks to me like you have a duff RGB panel. Did you ever get it swapped?
    • C

      TAIL485
      Modules • • cepics

      4
      0
      Votes
      4
      Posts
      5438
      Views

      J

      @m5stack Hello! I would like to know to which bronchi pins A and B of the RS485 extension card are connected to the BUS, please. I can't get my M5 to communicate via RS485, however I soldered the small expansion card well. For my program I am using an ESP32 based Arduino library for the Modbus RTU
    • C

      KinoWheels M5Stack porting WIP...
      PROJECTS • • cepics

      4
      0
      Votes
      4
      Posts
      7046
      Views

      F

      @cepics Do you have a photo of the wiring? I don't understand the wiring diagram well. Thank you.
    • C

      Automotive Infrared Short Range Lidar Sensor
      PROJECTS • • cepics

      1
      0
      Votes
      1
      Posts
      2926
      Views

      No one has replied

    • C

      BMC_SBUS M5Stack porting
      General • • cepics

      2
      0
      Votes
      2
      Posts
      3673
      Views

      L

      codice arduino mega stabilizzatore #define BAUDRATE 100000 // oder 100000 115200 //#define BAUDRATE 115200 // oder 100000 115200 #define SERIALPORT Serial // - uncomment this line if using an arduino based board with more than one HW serial port class BMC_SBUS { public: uint8_t sbusData[25]; int16_t servos[18]; void begin(void); void Servo(uint8_t ch, int16_t position); void Send(void); void Update(void); private: uint8_t byte_in_sbus; uint8_t bit_in_sbus; uint8_t ch; uint8_t bit_in_servo; }; void BMC_SBUS::begin() { //intialise private data arrays //sbus_data is formatted for correct serial output //note that the actual 11bit sbus data for each channel is embedded across multiple data bytes in a very stange order //byte 1 and bytes 24 and 25 should be left as is //the first is a start byte, the last is a stop byte and the second last holds various flags //servos is the internal per channel position and is more straightforward - one int_16 per channel uint8_t loc_sbusData[25] = {0x0f, 0x01, 0x04, 0x20, 0x00, 0xff, 0x07, 0x40, 0x00, 0x02, 0x10, 0x80, 0x2c, 0x64, 0x21, 0x0b, 0x59, 0x08, 0x40, 0x00, 0x02, 0x10, 0x80, 0x00, 0x00}; int16_t loc_servos[18] = {1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 0, 0}; //setup serial port to transmit at 100k baud and use 1 parity and 2 stop bits SERIALPORT.begin(BAUDRATE, SERIAL_8E2); //setup public data arrays memcpy(sbusData, loc_sbusData, 25); memcpy(servos, loc_servos, 18); } void BMC_SBUS::Servo(uint8_t ch, int16_t position) { //set servo position on single channel if ((ch > 0) && (ch <= 16)) { constrain (position, 0, 2048); //keep within min/max values servos[ch - 1] = position; //expects a non zero starting index to the channel } } void BMC_SBUS::Send(void) { //send data over serial port SERIALPORT.write(sbusData, 25); //according to docs for Serial we can send the array along as is without a loop } void BMC_SBUS::Update(void) { //update positions for all servo channels within the SBUS data frame //ignores digital servos and any failsafe mode stuff that was originally written //clear out existing sbus data for all channel data bytes //ignores first and last bytes in the array (start and stop bytes) //mapping loop relies on initial 0 values - do not omit this step! uint8_t i; for (i = 1; i < 24; i++) { sbusData[i] = 0; } //reset counters ch = 0; bit_in_servo = 0; byte_in_sbus = 1; bit_in_sbus = 0; //format sbus data - maps sevo data array to sbus data array 1bit at a time //correctly deals with the little endian byte order in the process for (i = 0; i < 176; i++) //16channels*11bits = 176bits { if (servos[ch] & (1 << bit_in_servo)) //bitwise AND to check if the correct servo databit is set to 1 { sbusData[byte_in_sbus] |= (1 << bit_in_sbus); //bitwise OR sets the correct sbus databit if true } //increment bit counters bit_in_sbus++; bit_in_servo++; //if end of sbus byte reset sbus bit counter and increment sbus byte counter if (bit_in_sbus == 8) { bit_in_sbus = 0; byte_in_sbus++; } // if we have reached bit 11 in the servo data increment channel index and reset servo bit counter if (bit_in_servo == 11) { bit_in_servo = 0; ch++; } } } //Declare BMC_SBUS Object BMC_SBUS mySBUS; // Sbus delay value const int sbusWAIT = 7; //frame timing delay in msecs // Declare sbus control channels int panChannel = 1; int tiltChannel = 2; int rollChannel = 4; // Declare Kinowheels Stuff int XA_SIG = 0, XB_SIG = 1, YA_SIG = 0, YB_SIG = 1, pulsesX, pulsesY; // Declare Stuff for calculating Speed int xStampEnd = 0, yStampEnd = 0, timeStampEnd = 0, xPassed, yPassed, timePassed, sendX = 1023, sendY = 1023; void setup() { // Serial.begin(100000); überflüssig, weil in MC_SBUS enthalten // Start KinoWheels Stuff attachInterrupt(0, XA_RISE, RISING); // Pin 2 attachInterrupt(1, XB_RISE, RISING); // Pin 3 attachInterrupt(4, YA_RISE, RISING); // Pin 19 attachInterrupt(5, YB_RISE, RISING); // Pin 18 // Start BMC_SBUS object mySBUS.begin(); } void loop() { for (int i = 0; i < 1; i++) { //SBUS needs data every 7 Milliseconds. I repeat it three times for some time to pass for calculating speeds. mySBUS.Servo(tiltChannel, sendY); mySBUS.Servo(panChannel, sendX); // Update SBUS object and send data mySBUS.Update(); mySBUS.Send(); delay(sbusWAIT); } timePassed = millis() - timeStampEnd; xPassed = xStampEnd - pulsesX; yPassed = pulsesY - yStampEnd; sendX = 1023 + 100 * xPassed / timePassed; sendY = 1023 + 100 * yPassed / timePassed; for (int i = 0; i < 1; i++) { //Maybe this one is not needed. Will find it out later mySBUS.Servo(tiltChannel, sendY); mySBUS.Servo(panChannel, sendX); // Update SBUS object and send data mySBUS.Update(); mySBUS.Send(); delay(sbusWAIT); } xStampEnd = pulsesX; yStampEnd = pulsesY; timeStampEnd = millis(); } //Rotary Encoder Stuff by KinoWheels void XA_RISE() { detachInterrupt(0); //delay(1); XA_SIG = 1; if (XB_SIG == 0) pulsesX++;//moving forward if (XB_SIG == 1) pulsesX--;//moving reverse attachInterrupt(0, XA_FALL, FALLING); } void XA_FALL() { detachInterrupt(0); //delay(1); XA_SIG = 0; if (XB_SIG == 1) pulsesX++;//moving forward if (XB_SIG == 0) pulsesX--;//moving reverse attachInterrupt(0, XA_RISE, RISING); } void XB_RISE() { detachInterrupt(1); //delay(1); XB_SIG = 1; if (XA_SIG == 1) pulsesX++;//moving forward if (XA_SIG == 0) pulsesX--;//moving reverse attachInterrupt(1, XB_FALL, FALLING); } void XB_FALL() { detachInterrupt(1); //delay(1); XB_SIG = 0; if (XA_SIG == 0) pulsesX++;//moving forward if (XA_SIG == 1) pulsesX--;//moving reverse attachInterrupt(1, XB_RISE, RISING); } void YA_RISE() { detachInterrupt(4); //delay(1); YA_SIG = 1; if (YB_SIG == 0) pulsesY++;//moving forward if (YB_SIG == 1) pulsesY--;//moving reverse attachInterrupt(4, YA_FALL, FALLING); } void YA_FALL() { detachInterrupt(4); //delay(1); YA_SIG = 0; if (YB_SIG == 1) pulsesY++;//moving forward if (YB_SIG == 0) pulsesY--;//moving reverse attachInterrupt(4, YA_RISE, RISING); } void YB_RISE() { detachInterrupt(5); //delay(1); YB_SIG = 1; if (YA_SIG == 1) pulsesY++;//moving forward if (YA_SIG == 0) pulsesY--;//moving reverse attachInterrupt(5, YB_FALL, FALLING); } void YB_FALL() { detachInterrupt(5); //delay(1); YB_SIG = 0; if (YA_SIG == 0) pulsesY++;//moving forward if (YA_SIG == 1) pulsesY--;//moving reverse attachInterrupt(5, YB_RISE, RISING); }
    • C

      (SOLVED)SD Uploader can't flash new code
      Arduino • • cepics

      2
      0
      Votes
      2
      Posts
      2988
      Views

      C

      I solved like that: with M5Burner flash a different firmware in the stack like uiflow and than flash again lovian firmware.. tnks
    • C

      (SOLVED)M5Stack WIFI Upload file on SD in AP mode
      General • • cepics

      2
      0
      Votes
      2
      Posts
      4167
      Views

      C

      This one work on M5Stack!!!!! /* */ #include "M5Stack.h" #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #define ServerVersion "1.0" String webpage = ""; bool SD_present = false; #include "index.h" //Web page header file WebServer server(80); //=============================================================== // Setup //=============================================================== void setup(void) { Serial.begin(115200); Serial.println(); Serial.println("Booting Sketch..."); //ESP32 As access point IP: 192.168.4.1 WiFi.mode(WIFI_AP); //Access Point mode WiFi.softAP("ESPWebServer", "12345678"); //Password length minimum 8 char //---------------------------------------------------------------- Serial.print(F("Initializing SD card...")); if (!SD.begin(TFCARD_CS_PIN, SPI, 40000000)) { // see if the card is present and can be initialised. Wemos SD-Card CS uses D8 Serial.println(F("Card failed or not present, no SD Card data logging possible...")); SD_present = false; } else { Serial.println(F("Card initialised... file access enabled...")); SD_present = true; } ///////////////////////////// Server Commands server.on("/", HomePage); server.on("/download", File_Download); server.on("/upload", File_Upload); server.on("/fupload", HTTP_POST, []() { server.send(200); }, handleFileUpload); ///////////////////////////// End of Request commands server.begin(); Serial.println("HTTP server started"); } //=============================================================== // This routine is executed when you open its IP in browser //=============================================================== void loop(void) { server.handleClient(); delay(1); } // All supporting functions from here... //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void HomePage() { SendHTML_Header(); webpage += F("<a href='/download'><button>Download</button></a>"); webpage += F("<a href='/upload'><button>Upload</button></a>"); append_page_footer(); SendHTML_Content(); SendHTML_Stop(); // Stop is needed because no content length was sent } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void File_Download() { // This gets called twice, the first pass selects the input, the second pass then processes the command line arguments if (server.args() > 0 ) { // Arguments were received if (server.hasArg("download")) SD_file_download(server.arg(0)); } else SelectInput("Enter filename to download", "download", "download"); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void SD_file_download(String filename) { if (SD_present) { File download = SD.open("/" + filename); if (download) { server.sendHeader("Content-Type", "text/text"); server.sendHeader("Content-Disposition", "attachment; filename=" + filename); server.sendHeader("Connection", "close"); server.streamFile(download, "application/octet-stream"); download.close(); } else ReportFileNotPresent("download"); } else ReportSDNotPresent(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void File_Upload() { append_page_header(); webpage += F("<h3>Select File to Upload</h3>"); webpage += F("<FORM action='/fupload' method='post' enctype='multipart/form-data'>"); webpage += F("<input class='buttons' style='width:40%' type='file' name='fupload' id = 'fupload' value=''><br>"); webpage += F("<br><button class='buttons' style='width:10%' type='submit'>Upload File</button><br>"); webpage += F("<a href='/'>[Back]</a><br><br>"); append_page_footer(); server.send(200, "text/html", webpage); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ File UploadFile; void handleFileUpload() { // upload a new file to the Filing system HTTPUpload& uploadfile = server.upload(); // See https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer/srcv // For further information on 'status' structure, there are other reasons such as a failed transfer that could be used if (uploadfile.status == UPLOAD_FILE_START) { String filename = uploadfile.filename; if (!filename.startsWith("/")) filename = "/" + filename; Serial.print("Upload File Name: "); Serial.println(filename); SD.remove(filename); // Remove a previous version, otherwise data is appended the file again UploadFile = SD.open(filename, FILE_WRITE); // Open the file for writing in SPIFFS (create it, if doesn't exist) filename = String(); } else if (uploadfile.status == UPLOAD_FILE_WRITE) { if (UploadFile) UploadFile.write(uploadfile.buf, uploadfile.currentSize); // Write the received bytes to the file } else if (uploadfile.status == UPLOAD_FILE_END) { if (UploadFile) // If the file was successfully created { UploadFile.close(); // Close the file again Serial.print("Upload Size: "); Serial.println(uploadfile.totalSize); webpage = ""; append_page_header(); webpage += F("<h3>File was successfully uploaded</h3>"); webpage += F("<h2>Uploaded File Name: "); webpage += uploadfile.filename + "</h2>"; webpage += F("<h2>File Size: "); webpage += file_size(uploadfile.totalSize) + "</h2><br>"; append_page_footer(); server.send(200, "text/html", webpage); } else { ReportCouldNotCreateFile("upload"); } } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void SendHTML_Header() { server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); server.sendHeader("Pragma", "no-cache"); server.sendHeader("Expires", "-1"); server.setContentLength(CONTENT_LENGTH_UNKNOWN); server.send(200, "text/html", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves. append_page_header(); server.sendContent(webpage); webpage = ""; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void SendHTML_Content() { server.sendContent(webpage); webpage = ""; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void SendHTML_Stop() { server.sendContent(""); server.client().stop(); // Stop is needed because no content length was sent } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void SelectInput(String heading1, String command, String arg_calling_name) { SendHTML_Header(); webpage += F("<h3>"); webpage += heading1 + "</h3>"; webpage += F("<FORM action='/"); webpage += command + "' method='post'>"; // Must match the calling argument e.g. '/chart' calls '/chart' after selection but with arguments! webpage += F("<input type='text' name='"); webpage += arg_calling_name; webpage += F("' value=''><br>"); webpage += F("<type='submit' name='"); webpage += arg_calling_name; webpage += F("' value=''><br>"); webpage += F("<a href='/'>[Back]</a>"); append_page_footer(); SendHTML_Content(); SendHTML_Stop(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void ReportSDNotPresent() { SendHTML_Header(); webpage += F("<h3>No SD Card present</h3>"); webpage += F("<a href='/'>[Back]</a><br><br>"); append_page_footer(); SendHTML_Content(); SendHTML_Stop(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void ReportFileNotPresent(String target) { SendHTML_Header(); webpage += F("<h3>File does not exist</h3>"); webpage += F("<a href='/"); webpage += target + "'>[Back]</a><br><br>"; append_page_footer(); SendHTML_Content(); SendHTML_Stop(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void ReportCouldNotCreateFile(String target) { SendHTML_Header(); webpage += F("<h3>Could Not Create Uploaded File (write-protected?)</h3>"); webpage += F("<a href='/"); webpage += target + "'>[Back]</a><br><br>"; append_page_footer(); SendHTML_Content(); SendHTML_Stop(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ String file_size(int bytes) { String fsize = ""; if (bytes < 1024) fsize = String(bytes) + " B"; else if (bytes < (1024 * 1024)) fsize = String(bytes / 1024.0, 3) + " KB"; else if (bytes < (1024 * 1024 * 1024)) fsize = String(bytes / 1024.0 / 1024.0, 3) + " MB"; else fsize = String(bytes / 1024.0 / 1024.0 / 1024.0, 3) + " GB"; return fsize; } and this is the page void append_page_header() { webpage = F("<!DOCTYPE html><html>"); webpage += F("<head>"); webpage += F("<title>File Server</title>"); // NOTE: 1em = 16px webpage += F("<meta name='viewport' content='user-scalable=yes,initial-scale=1.0,width=device-width'>"); webpage += F("<style>"); webpage += F("body{max-width:65%;margin:0 auto;font-family:arial;font-size:105%;text-align:center;color:blue;background-color:#F7F2Fd;}"); webpage += F("ul{list-style-type:none;margin:0.1em;padding:0;border-radius:0.375em;overflow:hidden;background-color:#dcade6;font-size:1em;}"); webpage += F("li{float:left;border-radius:0.375em;border-right:0.06em solid #bbb;}last-child {border-right:none;font-size:85%}"); webpage += F("li a{display: block;border-radius:0.375em;padding:0.44em 0.44em;text-decoration:none;font-size:85%}"); webpage += F("li a:hover{background-color:#EAE3EA;border-radius:0.375em;font-size:85%}"); webpage += F("section {font-size:0.88em;}"); webpage += F("h1{color:white;border-radius:0.5em;font-size:1em;padding:0.2em 0.2em;background:#558ED5;}"); webpage += F("h2{color:orange;font-size:1.0em;}"); webpage += F("h3{font-size:0.8em;}"); webpage += F("table{font-family:arial,sans-serif;font-size:0.9em;border-collapse:collapse;width:85%;}"); webpage += F("th,td {border:0.06em solid #dddddd;text-align:left;padding:0.3em;border-bottom:0.06em solid #dddddd;}"); webpage += F("tr:nth-child(odd) {background-color:#eeeeee;}"); webpage += F(".rcorners_n {border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:20%;color:white;font-size:75%;}"); webpage += F(".rcorners_m {border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:50%;color:white;font-size:75%;}"); webpage += F(".rcorners_w {border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:70%;color:white;font-size:75%;}"); webpage += F(".column{float:left;width:50%;height:45%;}"); webpage += F(".row:after{content:'';display:table;clear:both;}"); webpage += F("*{box-sizing:border-box;}"); webpage += F("footer{background-color:#eedfff; text-align:center;padding:0.3em 0.3em;border-radius:0.375em;font-size:60%;}"); webpage += F("button{border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:20%;color:white;font-size:130%;}"); webpage += F(".buttons {border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:15%;color:white;font-size:80%;}"); webpage += F(".buttonsm{border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:9%; color:white;font-size:70%;}"); webpage += F(".buttonm {border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:15%;color:white;font-size:70%;}"); webpage += F(".buttonw {border-radius:0.5em;background:#558ED5;padding:0.3em 0.3em;width:40%;color:white;font-size:70%;}"); webpage += F("a{font-size:75%;}"); webpage += F("p{font-size:75%;}"); webpage += F("</style></head><body><h1>File Server "); webpage += String(ServerVersion) + "</h1>"; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void append_page_footer(){ // Saves repeating many lines of code for HTML page footers webpage += F("<ul>"); webpage += F("<li><a href='/'>Home</a></li>"); // Lower Menu bar command entries webpage += F("<li><a href='/download'>Download</a></li>"); webpage += F("<li><a href='/upload'>Upload</a></li>"); webpage += F("</ul>"); webpage += "<footer>&copy;"+String(char(byte(0x40>>1)))+String(char(byte(0x88>>1)))+String(char(byte(0x5c>>1)))+String(char(byte(0x98>>1)))+String(char(byte(0x5c>>1))); webpage += String(char((0x84>>1)))+String(char(byte(0xd2>>1)))+String(char(0xe4>>1))+String(char(0xc8>>1))+String(char(byte(0x40>>1))); webpage += String(char(byte(0x64/2)))+String(char(byte(0x60>>1)))+String(char(byte(0x62>>1)))+String(char(0x70>>1))+"</footer>"; webpage += F("</body></html>"); }
    • C

      COMMU & CAN
      Modules • • cepics

      4
      0
      Votes
      4
      Posts
      4786
      Views

      @cepics Is feasible, but we have not done any example in this regard
    • C

      sketch to mount M5Stack sd like a card reader do
      SOFTWARE • • cepics

      12
      0
      Votes
      12
      Posts
      12654
      Views

      C

      @crami25 M5Stack_AP_SD_Uploader