Adafruit & CircuitPython & Node.js All In One

Adafruit & CircuitPython & Node.js All In One

Node.js 版 package

没有的 Node.js 版 package

  1. 直接调用底层 C/C++ 库实现 ???
  2. 用 Node.js 手动实现底层逻辑 ???
  3. 使用 Node.js 在后台调用现成的 Python package,读写文件交换数据(Python 脚本写入文件,Node.js 读取文件) ???

参考 package:

http://github.com/orgs/adafruit/repositories?q=node&type=all&language=&sort=

http://github.com/rpi-ws281x

http://github.com/rpi-ws281x/rpi-ws281x-python

http://github.com/jgarff/rpi_ws281x

http://github.com/richardghirst/rpi_ws281x

http://github.com/beyondscreen/node-rpi-ws281x-native

http://www.npmjs.com/package/rpi-ws281x-native

{
  'conditions': [
    # FIXME: check for architecture instead of OS, should only build on linux/arm/BCM2702
    ['OS=="linux"', {
      'targets': [
        {
          'target_name': 'rpi_ws281x',
          'sources': ['./src/rpi-ws281x.cc'],
          'dependencies': ['rpi_libws2811'],
          'include_dirs': ["<!(node -e \"require('nan')\")"],
          'defines': ['NAPI_DISABLE_CPP_EXCEPTIONS'],
        },

        {
          'target_name': 'rpi_ws281x-version',
          'type': 'none',
          'sources': ['./src/rpi_ws281x/version'],
          'actions': [{
            'action_name': 'make_version_h',
            'variables': {'version_file': './src/rpi_ws281x/version'},
            'inputs': ['./tools/make-version-h.js', '<@(version_file)'],
            'outputs': ['./src/rpi_ws281x/version.h'],
            'action': ['node', './tools/make-version-h.js', '<@(version_file)', '<@(_outputs)'],
          }]
        },

        {
          'target_name': 'rpi_libws2811',
          'type': 'static_library',
          'dependencies': ['rpi_ws281x-version'],
          'sources': [
            "<!@(node -p \"require('fs').readdirSync('./src/rpi_ws281x').filter(f => (f.match(/\.c$/) && !f.match('main.c'))).map(f => 'src/rpi_ws281x/' + f).join(' ')\")"
          ],
          'cflags!': ['-Wextra']
        }
      ]
    },

    # OS != linux: provide a dummy-target that at least won't break the install here
    {
      'targets': [{
        'target_name': 'rpi_ws281x',
        'type': 'none',
        'actions': [{
          'action_name': 'not_supported_msg',
          'inputs': [],
          'outputs': ['--nothing-built--'],
          'action': ['true'],
          'message': '**** YOU ARE INSTALLING THIS MODULE ON AN UNSUPPORTED PLATFORM ****'
        }]
      }]
    }]
  ]
}

http://github.com/beyondscreen/node-rpi-ws281x-native/blob/master/binding.gyp

http://github.com/beyondscreen/node-rpi-ws281x-native/blob/master/src/rpi-ws281x.cc

js

http://github.com/adafruit?q=&type=all&language=javascript&sort=

http://github.com/adafruit/circuitpython-repl-js

CircuitPython

http://github.com/adafruit/circuitpython

http://circuitpython.org/

MicroPython

http://github.com/micropython/micropython

http://micropython.org/

demos

(? 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 http://www.cnblogs.com/xgqfrms/ 查看原创文章!

refs



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 ?️,侵权必究⚠️!


本文首发于博客园,作者:xgqfrms,原文链接:http://www.cnblogs.com/xgqfrms/p/17410821.html

未经授权禁止转载,违者必究!


本文转载于网络 如有侵权请联系删除

相关文章

  • 【综合笔试题】难度 4/5,综合构造运用题

    题目描述这是LeetCode上的「406.根据身高重建队列」,难度为「中等」。Tag:「排序」、「构造」、「二分」、「树状数组」假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i]=[h_i,k_i]表示第i个人的身高为h_i,前面正好有k_i个身高大于或等于h_i的人。请你重新构造并返回输入数组people所表示的队列。返回的队列应该格式化为数组queue,其中queue[j]=[h_j,k_j]是队列中第j个人的属性(queue[0]是排在队列前面的人)。示例1:输入:people=[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] 输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 解释: 编号为0的人身高为5,没有身高更高或者相同的人排在他前面。 编号为1的人身高为7,没有身高更高或者相同的人排在他前面。 编号为2的人身高为5,有2个身高更高或者相同的人排在他前面,即编号为0和1的人。 编号为3的人身高为6,有1个身高更高或者相同的人排在他前面,即编号为1的人

  • ZooKeeper的数据模型与监听机制

    相信大家在看了《ZooKeeper入门(概念+shell操作)》后对ZooKeeper已经有了一定的基础,本篇博客小菌则为大家带来的是关于ZooKeeper的数据模型与监听机制!让大家对ZooKeeper的底层原理有一个更深的认知! ZooKeeper数据模型ZooKeeper的数据模型,在结构上和标准文件系统的非常相似,拥有一个层次的命名空间,都是采用树形层次结构,ZooKeeper树中的每个节点被称为—Znode。和文件系统的目录树一样,ZooKeeper树中的每个节点可以拥有子节点。但也有不同之处:Znode兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分,并可以具有子Znode。用户对Znode具有增、删、改、查等操作(权限允许的情况下)。Znode具有原子性操作,读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。Znode存储数据大小有限制。ZooKeeper虽然可以关

  • 蓝桥杯 基础练习 完美的代价

    问题描述  回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。   交换的定义是:交换两个相邻的字符   例如mamad   第一次交换ad:mamda   第二次交换md:madma   第三次交换ma:madam(回文!完美!)输入格式  第一行是一个整数N,表示接下来的字符串的长度(N<=8000)   第二行是一个字符串,长度为N.只包含小写字母输出格式  如果可能,输出最少的交换次数。   否则输出Impossible样例输入5 mamad样例输出3C++算法#include<cstdio> #include<iostream> usingnamespacestd; intchanges(chars[],charx,intn) { inti,change=0,j,k; for(i=0;i<n/2;i++) { if(s[i]==x) { for(j=i;j<n-i-1;j++) if(s[n-i-1]==s

  • 私密的搜索引擎搭建

    说明:之前介绍过一个多平台聚合搜索服务Searx,都是以Google等国外搜索为主→传送门,然后这里说的秘迹搜索就是基于Searx二次开发,主要是聚合国内的百度、360、搜狗等搜索服务,专为国人开发,而且秘迹搜索可以最大程度的保护个人搜索隐私,Ta不会根据搜索关键词追踪用户,也不会通过历史搜索内容做广告推荐,目前该搜索源码开源,看见很多人想搭建个,发现教程挺简单的,这里就水个搭建教程。截图??安装Github地址:https://github.com/entropage/mijisou官方网站:https://mijisou.com,不想自己搭建的直接就使用这个地址搜索。1、安装依赖 CenOS6系统:#安装EPEL rpm-Uvhhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm #安装Python3和Redis yuminstallpython34redisgitscreen-y #安装pip3 wgethttps://bootstrap.pypa.io/get-pip.py python3g

  • Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料。在前面的博文《Android开发笔记(五十七)录像录音与播放》中,介绍了视频/音频的录制与播放,其中录像用的是MediaRecorder类,播放用的是MediaPlayer类。虽然Android还提供了专门的视频视图VideoView,但是该控件并非新的东西,而是继承了MediaRecorder和MediaPlayer,所以严格来说,Android上面只有一种视频的录制和播放方式。可是音频就大不一样了,Android提供了两种录音方式,以及至少三种常用的播音方式。两种录音方式分别是MediaRecorder类和AudioRecord类,而播音方式包括MediaPlayer类、AudioTrack类和SoundPool类,它们的使用场合各有千秋,且待笔者下面细细道来。 首先是MediaRecorder与MediaPlayer,这对组合即可用于录像,也可单独录制音频。它们处理的音频文件是压缩过的编码文件,通常用于录制和播放音乐,是最经常用到的。MediaRecorde

  • 老生常谈GET和POST,以备常查

    ------------------- GET和POST请求的区别 //--TCP/IP协议详解卷3 13.3.1报文类型:请求与响应 HTTP/1.0报文有两种类型:请求和响应。HTTP/1.0请求的格式是: reqet-line headers(0或有多个) body(只对POST请求有效) request-line的格式是: requestrequest-URIHTTP版本号 支持以下三种请求: 1)GET请求,返回request-URI所指出的任意信息。 2)HEAD请求,类似于GET请求,但服务器程序只返回指定文档的首部信息,而不包含实际的文档内容。该请求通常被用来测试超文本链接的正确性、可访问性和最近的修改。 3)POST请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送body的请求。使用POST请求时需要在报文首部Content-Length字段中 指出body的长度。 明白?get请求表示客户端请求一个uri,服务器返回客户端请求的uri,post请求表示客户端请求的时候还要提交数据,比喻提交form表单,要提交的数据会放到请求报文的b

  • Object Detection系列(二) SPP-Net

    作者:张旭编辑:黄俊嘉该内容是目标检测系列的第二篇,第一篇请移步:ObjectDetection系列(一)R-CNNSPP-Net简介在上一篇R-CNN的文章中,详细介绍了R-CNN算法,同时也说明了R-CNN的致命缺陷,超长的训练时间(84h)和测试时间(47s),造成这个问题的主要原因就是重复性的卷积计算,在R-CNN中,输入到CNN网络中的图片是ss算法提取到的区域,每一张待检测图都会产生1000-2000个区域,这也就意味着卷积计算要重复1000-2000次,但是由于ss算法提取到的区域本身就有很多重叠,所以这种重复计算是非常没有必要的。 那么能不能只通过一次卷积计算就完成整张图像的特征提取工作呢?这就是SPP-Net的主要贡献,也是在R-CNN之后的很多网络结构的统一目标——如何共享卷积计算。SPP-Net主要改进有下面两个:1.共享卷积计算 2.空间金字塔池化在SPP-Net中同样由这几个部分组成:ss算法 CNN网络 SVM分类器 boundingboxss算法的区域建议框同样在原图上生成,但是却在Conv5上提取,当然由于尺寸的变化,在Conv5层上提取时要经过尺度变换

  • 【PPT】国内三大运营商大数据发展现状与展望

  • 信号处理中包络是什么意思_重庆邮电大学复试通信原理

    大家好,又见面了,我是你们的朋友全栈君。第一章绪论1.基带信号的定义基带信号是指信号的频谱从零频附近开始的,没有经过调制的信号2.什么是数字信号和模拟信号?二者的区别是什么?数字信号是信号参量的取值是离散的,模拟信号是信号参量的取值是连续的。区别是信号参量的取值是连续还是离散。3.什么是数字通信?描述数字通信系统的主要优缺点?数字通信就是用数字信号传输信息的通信系统。数字通信系统的优点有差错可控,抗干扰能力强,易于存储,处理和交换,易于集成和加密,设备便于集成化和微机化,便于构成数字网。缺点是频带利用率不高,系统设备较为复杂。4.数字通信系统的一般模型,并简述各个方框的功能信源——信源编码——加密——信道编码——调制——信道——解调——信道译码——解密——信源译码——信宿信源编码和译码是为了压缩数据,减少冗余,提高传输的有效性。同时完成模数变换。信道编码和译码是增加冗余,提高传输的可靠性,信道解码可以发现传输中的错误。加密是为了保证信息的安全,人为得将传输的数字序列扰乱,只有能够对数据正确解密的人才能获取信息。调制的目的是形成适合在信道上传输的信号,提高抗干扰能力,还可以用于实现多路复

  • 腾讯云邮件推送更新邮件模板api接口

    1.接口描述接口请求域名:ses.tencentcloudapi.com。 更新邮件模板,更新后需再次审核 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:UpdateEmailTemplate。 Version 是 String 公共参数,本接口取值:2020-10-02。 Region 是 String 公共参数,详见产品支持的地域列表。 TemplateContent 是 TemplateContent 模板内容 TemplateID 是 Integer 模板ID TemplateName 是 String 模板名字 3.输出参数 参数名称 类型 描述 RequestId String 唯一请求ID,每

  • 作为一名测试员“支付功能”你是怎么测试?

      前言 作为测试,不管是面试还是笔试,必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中: “说说你项目中的xx模块你是如何测试的?” “给你一个购物车,你要怎么测试?” "你说一下这个产品的登录功能有哪些测试点?" “支付功能怎么测试?” ...... 所有的这些问题其实都是在考察你的测试思维。我们再回答这类问题的时候有方法可依循的。 今天这篇文章,我就很多同学都觉得难的一个问题“支付功能”作为案例,一起来分析一下如何回答这类的面试题。 测试思维 要分析测试点之前,我们先来梳理一下测试思维。总结来说,任何事物的测试思路都可以总结如下: 第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的? 这个步骤一般是参考公司的需求文档来的,如果产品提供需求文档的同时提供了业务流程图,可以遵循流程图来梳理;如果产品没有提供流程图,就需要测试人员根据需求的理解自己画出流程图,达到梳理业务的目的。 第二步:根据流程进行模块细分,然后针对每个功能模块进行详细的测试点设计和提取。 这个单个功能的测试点提取要覆盖

  • [Reinforcement Learning] Value Function Approximation

    为什么需要值函数近似? 之前我们提到过各种计算值函数的方法,比如对于MDP已知的问题可以使用Bellman期望方程求得值函数;对于MDP未知的情况,可以通过MC以及TD方法来获得值函数,为什么需要再进行值函数近似呢? 其实到目前为止,我们介绍的值函数计算方法都是通过查表的方式获取的: 表中每一个状态\(s\)均对应一个\(V(s)\) 或者每一个状态-动作<\(s,a\)> 但是对于大型MDP问题,上述方法会遇到瓶颈: 太多的MDP状态、动作需要存储 单独计算每一个状态的价值都非常的耗时 因此我们需要有一种能够适用于解决大型MDP问题的通用方法,这就是本文介绍的值函数近似方法。即: \[\hat{v}(s,\mathbf{w})\approxv_{\pi}(s)\\ \text{or}\hat{q}(s,a,\mathbf{w})\approxq_{\pi}(s,a) \]那么为什么值函数近似的方法可以求解大型MDP问题? 对于大型MDP问题而言,我们可以近似认为其所有的状态和动作都被采样和计算是不现实的,那么我们一旦获取了近似的值函数,我们就可以对于那些在历史经

  • 图论优化技巧

    NOIP考前: 图论优化技巧:(重要)!!!  

  • GeoIP的使用-C语言版

    0x00.简介 GeoIP库可以根据IP地址(支持IPv4和IPv6),定位该IP所在的洲、经纬度、国家、省市、ASN等信息。 GeoIP目前已经升级到GeoIP2,GeoIP2有两个版本,一个免费版(GeoLite2),一个收费版本(GeoIP2,200$起步)。 收费版本的准确率稍高一些,更新频率为每周二更新一次,免费版是每月第一个周二更新一次。 两者对比可以参考官网说明https://www.maxmind.com/en/geoip2-city-accuracy-comparison 对于大部分项目来说免费版已经足够使用了. 除了GeoIP外,其实还有ip2location、Quova等也提供类似的功能,但都是收费的.   0x01.资源下载 很多linux版本支持这个库,可以使用yum或apt进行下载,windows上使用的话就需要自己编译了. 源码下载: https://dev.maxmind.com/geoip/geoip2/downloadable/ GeoIP2提供了多种语言的API接口供选择. 这里我需要使用C语言接口,所以下载C语言版的源码. https:

  • CC2541蓝牙学习——定时器1的捕获/比较功能

    CC2541定时器1有5个捕获/比较通道,首先介绍什么是捕获和比较功能。 捕获通道: 设置的捕获开始的时候,CPU会将计数寄存器的值复制到捕获比较寄存器中并开始计数,当再次捕捉到电平变化时,这时 计数寄存器中的值减去刚才复制的值就是这段电平的持续时间,你可以设置上升沿捕获、下降沿捕获、或者上升沿下降沿 都捕获。捕获通道可以用来测量信号的频率周期或者波形的宽度,捕获通道类似于秒表的功能。 比较通道: 这里有两个单元:一个计数器单元和一个比较单元,比较单元就是个双缓冲寄存器,比较单元的值是可以根据不同的模式 设置的,与此同时,计数器在不停的计数,并不停的与比较寄存器中的值进行比较,当计数器的值与比较寄存器的值相等 的时候一个比较匹配就发生了,根据设置,可以产生不同的波形。对于定时器1,计数器单元就是2个8位的SFR:T1CNTH 和T1CNTL,比较单元就是2个8位的寄存器T1CCxH和T1CCxL(x:0~4)。而对于定时器3(4),计数器单元是寄存器 T3CNT(T4CNT),比较单元是寄存器T3CC0和T3CC1(T4CC0和T4CC1)。比较通道可以用来产生特定的波形,输 出PWM

  • Bitmap RGB24 4字节对齐

    BitmapRGB244字节对齐 本文中说的图片都是无压缩的彩色Bitmap图片。 最近在一个项目中有一个场景是需要将RGB32或RGB24的Bitmap转换成为RGB565的Bitmap,在RGB32转RGB565的过程中没有遇到什么问题: pixel565[0]=color[0]>>3;//R pixel565[1]=color[1]>>2;//G pixel565[2]=color[2]>>3;//B复制 但是在将RGB565转换成为RGB24的时候却出现问题了,高宽均100p的图片,用绘图程序绘制出来的大小是374,而我的却是300(图片数据)+54(头部信息)的大小。不明白为何多了20个字节的数据。后来查阅资料后发现是Bitmap的特性。 BMP图像数据,每一行的大小必须是4的倍数,如果不是用0填充,即4字节对齐。 所以加入了行对齐的操作: intcount=0; intalignNum=4-(pixelMat.cols%4); intalignData=0; MatConstIterator_<Vec3b>pixel,c

  • python解决matplotlib中文坐标值乱码的问题

    加上这句话即可 plt.rcParams['font.sans-serif']=['SimHei'] 复制 效果: 为了更好的明天

  • 常见的HTTP状态码

    2.开头(请求成功)表示成功处理了请求的状态代码 200  (成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。 201  (已创建) 请求成功并且服务器创建了新的资源。 202  (已接受) 服务器已接受请求,但尚未处理。 203  (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 204  (无内容) 服务器成功处理了请求,但没有返回任何内容。 205  (重置内容)服务器成功处理了请求,但没有返回任何内容。206  (部分内容) 服务器成功处理了部分GET请求。 3.开头(请求被重定向)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向 300  (多种选择) 针对请求,服务器可执行多种操作。服务器可根据请求者(useragent)选择一项操作,或提供操作

  • ORB-SLAM2学习4 initializer.h

    orb-slam2 Inlitializer.h 头文件的学习 a.预备知识,主要读取了作者的论文。    作者在论文中提到,这个头文件定义的东西全是用于单目的,双目和RGBD不需要初始化。地图初始化的目的就是得到两帧的相对运动,R T, 然后根据RT和这两帧匹配好的关键点,三角化出初始的三  维地图。论文里面提到了一共有5步。   1.在当前帧与参考帧之间提取ORB特征,就行匹配。    2.开启两个同步线程,同时计算H矩阵和F矩阵,H=homography用于特征点都是在同平面的情况,F=fundomental用于特征点不在同一平面的情况。代码中使用8个点就能恢复出想要的H和F,具体怎么处理呢?代码中随机的选8个点,(当前帧和参考帧的8个匹配好的点对,一共8对),一共挑选选200次,选出得分最高的H,F。这里得分如何计算?作者论文中详细的提到了计算方法。               &

  • Docker之Alpine制作镜像且上传至阿里云

    目的:   Alpine制作jdk镜像   Alpine制作jre镜像(瘦身)   Docker镜像上传至阿里云     Alpine制作jdk镜像      alpineLinux简介   AlpineLinux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musllibc和        BusyBox以减少系统的体积和运行时的资源消耗。       alpineLinux优点     1、小巧:基于Musllibc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;     2、安全:面向安全的轻量发行版;     3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。     4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。  alpine操作系统官网(https://pkgs.alpinelinux.org/packages)

  • 机器学习-斯坦福:学习笔记4-牛顿方法

    牛顿方法 本次课程大纲: 1、  牛顿方法:对Logistic模型进行拟合 2、 指数分布族 3、  广义线性模型(GLM):联系Logistic回归和最小二乘模型   复习: Logistic回归:分类算法 假设给定x以为参数的y=1和y=0的概率:     求对数似然性:   对其求偏导数,应用梯度上升方法,求得:   本次课程介绍的牛顿方法是一种比梯度上升快很多的方法,用于拟合Logistic回归   1、 牛顿方法 假设有函数,需要找使=0的 步骤: 1)       给出一个的初始值 2)       对求导,求导数为0时的值(就是求切线与x轴交点) 3)       重复步骤2   因为该点的导数值即为切线斜率,而斜率=该点y轴的值

相关推荐

推荐阅读