Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
无线投屏
小电视
PersimM3_柿饼M3模块
柿饼派M3玩了把无线投屏器 附源码
发布于 2021-07-22 13:03:55 浏览:1040
订阅该版
[tocm] ## 柿饼M3玩了把无线投屏器 - 准备工作,柿饼派1块,python2.7,opencv2环境. ![微信图片_20210722130114.jpg](https://oss-club.rt-thread.org/uploads/20210722/3a410f564e1c914a64b36be21ee8efc3.jpg.webp) - 彩屏投屏助手py,PC端运行,依赖opencv. ```python while True: image = pyautogui.screenshot(region=[0,0,1920,1080]) # x,y,w,h image.save('screenshot1.bmp') image = cv2.imread('screenshot1.bmp') frame1 = cv2.resize(image,(480, 272),interpolation=cv2.INTER_CUBIC) cv2.imwrite('screenshot.bmp', frame1) cv2.imshow('img', frame1) if cv2.waitKey(1)& 0xFF == ord("q"): server.socket.close() break ``` - 运行服务器 ```python python -m SimpleHTTPServer 8000 ``` - 柿饼派M3运行代码 ![微信图片_20210722131838.jpg](https://oss-club.rt-thread.org/uploads/20210722/32df69e5ac952931ec35ee55aa3dd778.jpg) ```c #include
#include
#include "string.h" #include "nes_common.h" #include "defe.h" #include "debe.h" #include
#define DBG_ENABLE #define DBG_SECTION_NAME "web.cap" #ifdef WEBCLIENT_DEBUG #define DBG_LEVEL DBG_LOG #else #define DBG_LEVEL DBG_INFO #endif /* WEBCLIENT_DEBUG */ #define DBG_COLOR #include
#define WEBCLIENT_HEADER_BUFSZ 4096 #define WEBCLIENT_RESPONSE_BUFSZ 480*3 #define WEBCLIENT_URI "http://192.168.88.94:8000/screenshot.bmp" struct layer_info info; static void cap_lcd_init(void) { rt_memset(&info, 0, sizeof(struct layer_info)); info.index = LAYER1; info.pipe = PIPE1; info.alpha_enable = 0; info.alpha_value = 0; info.x = 0; info.y = 0; info.width = 480; info.height = 272; info.format = COLOR_ARGB8888; /* addr from yuv ctrl */ info.type = LAYER_TYPE_RGB; info.buffer_addr = 0x81800000; /* add layer */ tina_debe_layer_add(DEBE, &info); tina_debe_layer_visible(DEBE, LAYER1); } static void rgb888_to_rgba888(unsigned char *frame_buf, unsigned char *ptr) { for(int i=0; i<480; i++) { frame_buf[i*4] = ptr[i*3]; frame_buf[i*4+1] = ptr[i*3+1]; frame_buf[i*4+2] = ptr[i*3+2]; } } static int web_client_getimage(void) { unsigned int * frame_buf = 0x81800000; int fd = -1, rc = WEBCLIENT_OK; size_t offset; int length, total_length = 0; unsigned char *ptr = RT_NULL; struct webclient_session* session = RT_NULL; int resp_status = 0; static int init = 0; if(init = 0) memset(frame_buf, 0, 480*272*4); init = 1; session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); if(session == RT_NULL) { rc = -WEBCLIENT_NOMEM; goto __exit; } if ((resp_status = webclient_get(session, WEBCLIENT_URI)) != 200) { LOG_E("get file failed, wrong response: %d (-0x%X).", resp_status, resp_status); rc = -WEBCLIENT_ERROR; goto __exit; } ptr = (unsigned char *) web_malloc(WEBCLIENT_RESPONSE_BUFSZ); if (ptr == RT_NULL) { LOG_E("get file failed, no memory for response buffer."); rc = -WEBCLIENT_NOMEM; goto __exit; } length = webclient_read(session, ptr, 54); // LOG_RAW("0 %08x \n", frame_buf); frame_buf += 480*271; // LOG_RAW("1 %08x \n", frame_buf); if (session->content_length < 0) { while (1) { length = webclient_read(session, ptr, WEBCLIENT_RESPONSE_BUFSZ); if (length > 0) { // write(fd, ptr, length); // rgb888_to_rgba888(frame_buf, ptr); *frame_buf -= 480; total_length += length; LOG_RAW(">%d ", length); } else { break; } } } else { for (offset = 0; offset < (size_t) session->content_length;) { length = webclient_read(session, ptr, session->content_length - offset > WEBCLIENT_RESPONSE_BUFSZ ? WEBCLIENT_RESPONSE_BUFSZ : session->content_length - offset); if (length > 0) { // write(fd, ptr, length); rgb888_to_rgba888(frame_buf, ptr); total_length += length; frame_buf -= 480; // LOG_RAW("*%08x ", frame_buf); } else { break; } offset += length; } } if (total_length) { LOG_D("save %d bytes.", total_length); } __exit: // if (fd >= 0) // { // close(fd); // } if (session != RT_NULL) { webclient_close(session); } if (ptr != RT_NULL) { web_free(ptr); } return rc; } static void win_cap_thread(void *parameter) { cap_lcd_init(); while(1) { web_client_getimage(); rt_kprintf("win cap\n"); } } void win_cap_demo(void) { int tid = rt_thread_create("vnes", win_cap_thread, 0, 2048*16, 18, 20); if (tid != RT_NULL) rt_thread_startup(tid); return 0; } MSH_CMD_EXPORT(win_cap_demo, win_cap_demo); ``` - 运行视频 - 请点击 https://www.bilibili.com/video/BV1xU4y1n7SJ - 爽后感,好玩,帧率低,装A和C之间还可以,暂没有发现有什么实际用途。 - 帧率提升 后续... **相关文章:** [柿饼派M3 RW007 制作连接蓝牙手柄](https://club.rt-thread.org/ask/article/2897.html) [柿饼派M3玩了把无线投屏器 附源码](https://club.rt-thread.org/ask/article/2902.html)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
achinwoo
这家伙不懒,啥都会写
文章
5
回答
13
被采纳
2
关注TA
发私信
相关文章
1
柿饼M3用at_device来驱动EC200通讯时rt_free断言
2
柿饼M3 SDK固件编译报错
3
杮饼UI监听函数怎么用
4
柿饼m3 sdk 使用问题
5
柿饼派M3的gpio可以接收5V电平的输入吗?
6
柿饼M3的串口0即uart0是否调试通过了。
7
persimmonUI中提供modbus的接口
8
M3的persimmon UI的C语言接口
9
柿饼派的网络编程的demo
10
M3中的基于http的通信的例程
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部