创客百科

姿势共享,有节操无门槛参与的创客百科,创客动力之源 \ (^_^) /

用户工具

站点工具


note:spoony:timor-tv

这是本文档旧的修订版!


A PCRE internal error occured. This might be caused by a faulty plugin

====== 复古小电视使用文档 ====== 这是ssd1306复古小电视的使用文档,购买了此产品的用户可以通过阅读文档,了解复古小电视的使用方法,包括学会如何显示png图片、如何使用canvas绘图、如何使用原生api绘图。 没有购买此产品的读者,可以点击上面的淘宝链接访问复古小电视介绍页面,建议在手机端打开,想直接购买,可以通过淘宝链接,或者点击右下角的与我联系,或者直接发邮件与我联系。 此文档中提到的程序代码、图片等全部资源在页面底部有下载地址 ===== 如何自定义显示内容? ===== 自定义显示内容有3种方法,分别是: - 直接显示png图片。此方式最简单 - 使用canvas绘图。此方式能动态显示任何内容,包括中文汉字 - 使用api绘图。此方式性能最好 读者可以根据自己的基础选择上面的任何一种方式。也可以同时使用。对于没有nodejs基础的读者,建议选择png图片方式,如果想动态显示内容,则可以使用canvas或者api方式,但是需要你有一点nodejs基础。因为驱动是nodejs编写的,别担心,使用它们绘图非常简单。 ===== 显示png图片 ===== 首先准备一张png格式的图片,注意图片的分辨率最佳为128*64,因为复古小电视的屏幕分辨率就是128*64。其次,png图片的内容最好为白色,背景透明,因为复古小电视的屏幕是OLED 屏幕,只能显示单色。黑色的地方在屏幕上会显示,透明的地方则不会显示。 然后进入 watcher 的根目录,新建 show_png.js 文件,同时把 png 图片也放在根目录。我们将使用驱动提供的 drawPNG 函数来显示图片。show_png.js 文件的代码如下: <code> // oled.js 是购买产品附带的软件包,包含完整驱动,可直接使用 var Device = require('./oled.js'); var ssd1306 = new Device({ description: 'test drawPNG', model: 'ssd1306', width: 128, height: 64, address: 0x3c, device: '/dev/i2c-1' }); ssd1306.drawPNG('./starwars.png', false, function(error){ if (error) { console.log('png 图片显示错误,请确认图片的文件名是否正确'); console.log(error); }else{ console.log('显示PNG图片完成'); } }); </code> 上面第一段代码的作用是引入 onedevice 驱动包,然后我们创建了一个 SSD1306复古小电视 的驱动。这些都是必要的,并且都是相同的。创建完驱动后,我们就能用驱动提供的 api 去操作屏幕了。 我们使用 drawPNG 来显示图片。此函数第一个参数是图片的路径,第二个参数我们暂且使用 false,第三个参数是回调,显示完成或者错误的时候会调用。假如现在根目录下有一张叫 starwars.png 的图片,保存文件,然后执行 node show_png.js 现在,你的屏幕应该会显示图片了。如果没有提示 显示PNG图片完成,而是报错了,则确认下图片的路径。好了,现在你已经学会了如何显示图片,接下来再去学习如何制作png图片吧。如果对以上文档仍有疑问,请通过开篇的联系方式与我联系。 ===== 我们来点高级的,使用 canvas 动态显示内容 ===== 在开始之前,确保你按照软件包的安装说明安装好了全部的依赖,这其中就包括我们要用的 canvas 的安装。canvas 是 HTML5 中定义的一个用于在网页实时生成图像,并且可以操作图像内容的 api。你只需要学会如何使用 canvas,它的教程非常多。 下面,我们来学习如何使用 canvas 来动态的绘制图形。新建 show_canvas.js 文件,文件的代码如下: <code> var Device = require('./oled.js'); // 注意,这里多了一行,我们要使用 canvas var Canvas = require('canvas'); var ssd1306 = new Device({ description: 'test drawCanvas', model: 'ssd1306', width: 128, height: 64, address: 0x3c, device: '/dev/i2c-1' }); // 创建一个 canvas 画布,并且大小是 128*64 var canvas = new Canvas(128, 64); var ctx = canvas.getContext('2d'); // 我们先设置字体和大小,然后把画笔的颜色设置成白色,最后显示2行文字 ctx.font = '18px Impact'; ctx.fillStyle = '#FFF'; ctx.fillText("hello Canvas", 0, 20); ctx.fillText("你好啊", 0, 50); // 上面是 canvas 的操作,现在我们让屏幕显示 canvas 的内容 ssd1306.drawCanvas(canvas); </code> 保存文件,然后运行 <code> node show_canvas.js </code> 现在,你的屏幕上应该会显示汉字了。需要注意的是,为了达到最理想的显示效果,canvas的分辨率最好和屏幕的分辨率一致,并且使用单色绘制canvas,建议用#FFF。因为无论如何,你的OLED都是单色的屏幕,无法显示彩色。虽然有彩色的OLED,但目前还没集成驱动。后续会集成更大尺寸的彩色LCD、TFT屏幕驱动。这是个巨大的工程,希望有懂这方面的软硬件工程师协助我。 更多 canvas 内容,可以通过这个网站学习,并在线预览效果 http://www.runoob.com/html/html5-canvas.html 最后我们使用原生 api 来做一个动画效果 动画的效果是一个屏幕扫描动画,一条垂直的直线从屏幕的左边开始逐列扫描到右边,然后又扫描到左边,一直循环往复。这个动画很简单,先垂直画一条直线,然后在横坐标依次叠加就出来动画效果了。新建 show_api.js 文件,代码如下: <code> /** * author: LanFly * email: bluescode@outlook.com * document: http://timor.tech/tv/doc.html */ var Device = require('./oled.js'); var ssd1306 = new Device({ description: 'test draw animation', model: 'ssd1306', width: 128, height: 64, address: 0x3c, device: '/dev/i2c-1' }); // 记录当前水平位置 var x = 0; // 记录扫描方向 var dt = 1; function render(oled) { // 每次都先清除屏幕 oled.clearDisplay(); // 然后画一条垂直的直线,前2个参数表示起点的横纵坐标,接下来2个参数表示终点的横纵坐标,最后一个参数表示颜色亮 oled.drawLine(x, 0, x, 63, 1); // 每次移动一个像素点 x = x + dt; // 如果到达屏幕右边界,则改变方向,向左移动扫描 if (x > 127) { x = 127; dt = -1; // 如果到达屏幕左边界,则改变方向,向右移动扫描 } else if (x < 0) { x = 0; dt = 1; } // 每隔30毫秒移动一次,注意不能太快 setTimeout(function () { render(oled); }, 30); } // 原生 api 挂载在 oled 对象上,开始显示 render(ssd1306.oled); </code> 保存文件,然后运行它。现在,你的屏幕应该在显示扫描动画了。动画的原理就是先显示一帧,然后清除,然后又快速的显示下一阵。只要速度保持足够快,就会出现动画效果。学习到这里就结束了,你应该能显示任何你想要显示的内容了,你甚至可以拿canvas播放视频。 原生 api 有非常多的方法,比如画点、线、面、矩形、圆、文字、关闭屏幕、打开屏幕、调节亮度等等。合理的使用它们。全部的 api 可以在这里查看:https://www.npmjs.com/package/oled-ssd1306-i2c#available-methods 此文档的代码下载地址 [[http://timor.tech/tv/tv_demo.zip]] 出处 http://timor.tech/tv/doc.html

本页面的其他翻译:
note/spoony/timor-tv.1548952049.txt.gz · 最后更改: 2019/02/01 00:27 (外部编辑)