4inch Squre Screen

7.85inch Long Screen

4inch Squre Screen
7.85inch Long Screen
The VoCore2 Ultimate has a sound card capable of recording and playing audio, so creating a small device for use with recent open-source AI tools could be a fun project.
The idea works like this: First, record audio input and send it to a server to convert the sound into text. The text is then forwarded to an AI server for processing, where we wait for its response. Once the reply is received, the text is converted back into an audio file (e.g., WAV format), which is transmitted via Wi-Fi or Ethernet to the VoCore2 device. Finally, the audio is played through a connected speaker.
There’s no difficult part—just a few lines of code should be able to accomplish it. 😊 Maybe I can directly use FFmpeg on the VoCore2, so I won’t need to do most of the coding myself. Additionally, the AI itself will help with coding. Hopefully, I’ll finish this project by the end of this week!
After upgrading to v0.23, we are proud to announce an important new feature that enables us to extend MPRO screens for more uses. After many days of rigorous testing, we have now released this feature.
MPRO is based on the ARM core and has approximately 10MB of memory, which is sufficient for most embedded applications. We can easily run LVGL on it. With LVGL (or by directly using MPRO’s extended API), we gain access to several new features:
Source code public at https://github.com/vonger/mpro-extend
You can directly upgrade your screen with the firmware in bin folder for quick test.
The main upgrade in the new version v0.23 is LZ4 compression. With this compression and partial drawing, we can greatly increase the FPS, making it stable at 60Hz or even higher for high-resolution screens like 10-inch (1024×600). With VoCore and USBIP (VirtualHere), it is also possible to make the screen wireless via WiFi.
New firmware, upgrade tool and sample code, download at https://vocore.io/misc/v2scrctl.zip
PS: end of this month we will make a demo board with 3.4 inch round screen and wireless function.
🙁 Very bad, vocore.io is offline. I have no idea what is happening; it just won’t turn on (maybe physical damage). Over the past ten years, the server has been offline many times. Sometimes heavy snow crashes the power supply, sometimes floods get into the server room, and sometimes there is a shortage of power supply.
Double hot backup and automatic switching are very important. After the server recovers, I must find a good way to make it more stable. I cannot rely solely on the server provider.
For now, I need to spend several hours recovering the site backup to another server first.
PS: for new order please directly email to sales@vocore.io, our sales will help you handle it directly.
This change log is copied from https://vocore.io/misc/v2scrctl.zip, README.txt.
From v0.16 to v0.20, the main upgrades include:
ffmpeg -i 800x480.bmp -v:q 3 -pix_fmt yuvj420p out.jpg
Framebuffer driver is out of date, so our latest driver DRM might be better for raspberrypi user to use VoCore Screen. This tutorial is for new MPRO version screen which support paritialy draw, it is very fast to show raspberry desktop and can easily reach 60FPS.
Source code at https://github.com/Vonger/mpro_drm/tree/6.6.y-dma
Framebuffer driver tutorial: https://vonger.cn/?p=15349 (out of date, not easy to run on new raspi)
When I develop, sometimes wifi or network not working, or ssh can not connect, only way to fix it to use serial port, but serial port do not support transfer file…there are no way to transfer small files, like a simple driver or small application, have to reboot and use uboot to reload everything, and kermit load new firmware to uboot is really slow.
PS: I know somebody can use kermit or sz/lz, but first of all, you need to have them in firmware already, that is a chicken-and-egg problem 🙂
I find default busybox shell(sh) support command “echo -ne”, this is a amazing way to transfer binary data by serial port, and do not need any depends, so I write a simple application, hope this helps.
Usage Example, save TEST.ko to VoCore2 /tmp/TEST.ko: sspdt TEST.ko /dev/ttyACM0
Note: after transfer, remember to run md5sum to check if the data transfer is correct and complete, serial port do not guarantee that. From my test, < 100KB file normally do not have problem, and speed approx 1.5KB/s
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <libserialport.h>
// apt install libserialport-dev
// gcc sspdt.c -o sspdt -lserialport
// speed is approx 1.5KB/s
#define min(a, b) ((a) < (b) ? (a) : (b))
uint8_t *alloc_from_file(const char *name, int *size)
{
FILE *fp = fopen(name, "rb");
if (fp == NULL)
return NULL;
fseek(fp, 0, SEEK_END);
*size = ftell(fp);
fseek(fp, 0, SEEK_SET);
uint8_t *buf = malloc(*size);
if (buf)
fread(buf, 1, *size, fp);
fclose(fp);
return buf;
}
struct sp_port *ssport_open(const char *name)
{
struct sp_port *port;
int baudrate = 115200, res;
res = sp_get_port_by_name(name, &port);
if (SP_OK != res)
return NULL;
res = sp_open(port, SP_MODE_READ_WRITE);
if (SP_OK != res) {
printf("sp_open=%d, %s\n", res, sp_last_error_message());
return NULL;
}
// clear input/output buffer.
sp_flush(port, SP_BUF_BOTH);
// gd32f150 supported protocol 115200, 8n1.
sp_set_baudrate(port, baudrate);
sp_set_bits(port, 8);
sp_set_parity(port, SP_PARITY_NONE);
sp_set_stopbits(port, 1);
// necessary, or system will drop 0x11 and 0x13.
sp_set_flowcontrol(port, SP_FLOWCONTROL_NONE);
return port;
}
void ssport_close(struct sp_port *port)
{
sp_flush(port, SP_BUF_BOTH);
sp_close(port);
sp_free_port(port);
}
int ssport_write(struct sp_port *port, const void *buf, size_t count)
{
int wbyte;
wbyte = sp_blocking_write(port, buf, count, 600);
//print_hex("wr", buf, wbyte);
return wbyte;
}
int ssport_read(struct sp_port *port, void *buf, size_t count)
{
int rbyte;
rbyte = sp_blocking_read(port, buf, count, 600);
//print_hex("rd", buf, rbyte);
return rbyte;
}
void process(int cur, int total)
{
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
printf("%9dB / %9dB [%3.1f%%]", cur, total, (float)cur / total * 100);
fflush(stdout);
}
void get_file_name(const char *name, char *out)
{
int i = strlen(name) - 1;
for (; i >= 0; i--) {
if (name[i] == '/' || name[i] == '\\')
break;
}
strcpy(out, name + i);
}
int main(int argc, char *argv[])
{
if (argc != 3) {
printf("sspdt [input file] [serial port]\r\n");
printf("send small files to device term by serial port.\r\n");
return 0;
}
int size = 0;
uint8_t *buf = alloc_from_file(argv[1], &size);
struct sp_port *sp = ssport_open(argv[2]);
ssport_write(sp, "\n\n", 2);
usleep(1000);
char name[128] = {0};
get_file_name(argv[1], name);
printf("file %s will save to device /tmp/%s\r\n", argv[1], name);
// each time read 16 bytes
for (int i = 0; i < size; i += 16) {
char cmd[0x100] = {0};
sprintf(cmd, "echo -ne '");
for (int j = 0; j < min(size - i, 16); j++) {
char tmp[16];
sprintf(tmp, "\\x%02x", buf[i + j]);
strcat(cmd, tmp);
}
strcat(cmd, "' >> /tmp/");
strcat(cmd, name);
strcat(cmd, "\n");
ssport_write(sp, cmd, strlen(cmd));
process(i, size);
usleep(10000);
}
process(size, size);
ssport_close(sp);
printf("\r\nDONE!\r\n");
return 1;
}
We are proud to announce that MPRO now supports a refresh rate of 60Hz.
Please download and try the following: https://vocore.io/misc/v2scrctl.zip. Use the latest firmware and the screen_test.c file.
The main upgrade is that the MPRO firmware now supports baseline JPEG compression, which is typically much smaller than bitmap. For example, an 800×480 16-bit bitmap is approximately 800KB, but a high-quality JPEG image is only 100~200KB. This reduction in size can increase the refresh speed by 300%~500%, allowing us to easily achieve a 60Hz refresh rate.
Note: The software part(like Simhub) may still need some time to adjust, so this feature will take some time to be implemented for dashboard users.
Finally the driver has finished 🙂
Now we can use VoCore screen as a small extend screen for windows.