V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jerkzhang
V2EX  ›  分享创造

这东西不错,不用学硬件知识,直接像正常写代码一样来开发硬件

  •  
  •   jerkzhang · 2016-01-20 15:34:46 +08:00 · 4493 次点击
    这是一个创建于 3260 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做了个小玩意儿,纯属玩玩儿……
    暂时只做好了 python 和 ruby 的 api 接口,欢迎内测。

    http://adamsolo.com
    http://evepi.cc

    复杂而苦力的连线与焊接,令人头疼的电路知识,对于想要涉足硬件开发的码农来说,这些都是噩梦。 纵使有 arduino 让抽象层次变得更高,但依然还是具有硬件色彩的复杂繁琐。 这个时代,也许需要一个更高的抽象层次,需要一种新的硬件开发思想。
    那就是夏娃派(下文称之为 Evepi )—— “硬件即对象, PC 即 MCU ,提高开发的抽象层以让硬件开发变得更加人性与高效”。
    利用 Evepi ,硬件即对象,硬件被抽象成程序中的一个个对象或函数, 开发者不需要学习任何电子硬件的知识、不需要管硬件层面的任何事情, 所有硬件的事情全都是一个黑箱子,开发者不需要知道; 开发者只需要利用任何自己所熟悉的编程语言,就像正常写程序一样写程序,来调用该硬件的 api 接口即可。
    “硬件即对象”是直观的开发思想,而实质的架构核心是“ PC as MCU ”(电脑即微控制器)。 以往的硬件里,广义上的 MCU 是大脑,而未来, MCU 只是抽象高层到抽象底层的中间的承上启下的一个工人,以及处理有限的必要的逻辑。 而复杂的逻辑层则是放在 PC 层面去解决, PC 层具有完善且亲和大众的操作系统,不管是 windows 还是 linux 发行版本,或是 Mac OS , 对于大众来说,都是亲和与人性化的,以及更加适合处理复杂的逻辑。 随着抽象层的提高,虽然性能与成本会受到影响,但开发效率倍增; 而在众多实际情况中,前者并非瓶颈,后者却意义重大。

    35 条回复    2016-01-27 15:21:19 +08:00
    k9982874
        1
    k9982874  
       2016-01-20 15:55:28 +08:00 via iPhone
    没看懂如何让工程师不用动烙铁就能研发硬件的。学习套件开发板么?
    stupil
        2
    stupil  
       2016-01-20 16:46:30 +08:00
    没看懂如何让工程师不用动烙铁就能研发硬件的。
    jerkzhang
        3
    jerkzhang  
    OP
       2016-01-20 16:56:38 +08:00
    @k9982874
    @stupil
    对于软件开发者来说为的是使用它做一些事情,比如通过超声波测得距离,比如让液晶屏幕上显示“ fuckGFW ”这几个字符,我就是把电路板层面的事情都做完了打包成模块了,以后软件工程师,就不需要管硬件层面的事情,直接插上 usb 接口到电脑上或者 miniPC 上,然后启动一个服务进程后,在正常的程序里插入某个包,像普通调用函数或者对象一样,只管写代码即可。 不同于硬件开发的思路最大的点是从硬件开发的角度往往是要追求的把东西做到一个板子上,做到符合需求的大小;而其实很多情况下,并不追求这样,分散型控制系统也一样 ok ,在相当一些情况下,开发效率远比性能、成本更重要。
    hardware
        4
    hardware  
       2016-01-20 17:01:03 +08:00
    还以为要说 Verilog-A 呢。。。
    sennes
        5
    sennes  
       2016-01-20 17:14:52 +08:00 via iPhone
    说白了,就还是写软件嘛。
    qhxin
        6
    qhxin  
       2016-01-20 17:20:49 +08:00   ❤️ 1
    开发效率远比性能、成本更重要。。。就硬件开发来说,我表示不赞同这句话
    stupil
        7
    stupil  
       2016-01-20 17:25:53 +08:00
    懂了。
    mlhorizon
        8
    mlhorizon  
       2016-01-20 17:43:22 +08:00   ❤️ 1
    软件工程师玩硬件,不仅仅是有焊接这样的硬门槛,更多是思想上的转变。
    例如软件开发的代码里面死循环的不可接受的,硬件开发的代码里面,一般的执行代码都在一个死循环 wihile 1 do ... 里面。
    DingSoung
        9
    DingSoung  
       2016-01-20 18:41:34 +08:00
    这东西只能拿来玩玩吧


    @mlhorizon 一个大的循环, 复杂的状态机, 中断系统等等.
    kokutou
        10
    kokutou  
       2016-01-20 18:44:52 +08:00 via Android
    @mlhorizon 233 ,看到 Arduino IDE 打开默认就是一个 setup 和 loop 当时就震惊了。。。久久不能平静。。
    jerkzhang
        11
    jerkzhang  
    OP
       2016-01-20 18:45:56 +08:00
    @qhxin 你说的很对,很多硬件开发的场景性能、成本更重要一些,像冰箱、手环、手机等都是像你说的这样,不过除去这种类型,依然是有一部分场景下开发效率比性能、成本更重要,比如快速的原型开发而实现某个作用、比如对于交互型建筑工程级别,多出几块板的价钱跟整个工程款项(百万人民币为单位)来说并不在意,假如逻辑层面更加复杂多变,那么利用 PC 或者 miniPC 作为核心控制的大脑会更加合适,整个过程的开发效率会呈现指数级别的增长。硬件的发展逐步已经呈现两种趋势,一项的发展是从机器的角度来考虑,向抽象层次更低的层面发展,换言之是专注于硬件本身而成为职业的硬件工程师,这样的硬件工程师未来是非常厉害与稀缺的,以及人数上的需求不会具有太大的增幅,可谓少而精。(吐槽:现在太多的硬件工程师都不做本行而变成软件工程师,这是对其所学专业的玷污,硬件是非常值得深入学习的);另外一种发展趋势是向抽象层次高的方向发展,也就是越来越应用化,核心的控制层的逻辑实现不会是停留在 arm 、 fpga 的层面,更多的应用者寻求的是实现作用,而会诉诸于相对来说更高的一个抽象层次, miniPC 层面等其他,讲白了 miniPC 就是基于 arm 而对逻辑的封装,讲白了,就是要对底层的逻辑封装,不管是 miniPC 层,还是基于声学、光学的抽象层次更高的逻辑实现的层次。两种层面侧重的东西不同而已。(就好比做用 ruby 开发网站和用 C 做系统开发两者侧重点不同而已,仅此而已,并不会出现相互的争论,不过这种争论也是存在过的,在 20 实际 90 年代,我还记得,当年在脚本语言 python 、 ruby 也包括 perl 刚诞生的时刻,那个年代之前主流的都是 C 和 java ,后来新型的语言刚出现, python 和 ruby 等都被嘲笑成玩具儿,这只是因为那个年代的软件开发思维依然是从机器的角度考虑编程语言,而 python 和 ruby 这些则是从人使用的角度来考虑这些问题,牺牲性能而提高开发效率,当性能不是瓶颈的时刻,何必花 7 天时间来用 C 写一个程序来实现结果,何不 15 分钟内用抽象层次更高的语言来达到目的。随着时间,大家的开发思想受到了启发与改变,而发展到当前的这个时代。题外话: python 和 ruby 已经很实用了,但是在高性能追求的时候依然无法取代 C++,不过更新的一些编程语言相对来说也考虑了人性的角度的同时也在试图兼顾性能取代 C++, go 语言和 rust 就是这样的语言)所以,硬件开发的发展也是历史的重演, evepi 只是我的游戏之作,之后应该不会继续更新丰富,但是咱们硬件学科的思想上应该开放、变化与发展。
    xmoiduts
        12
    xmoiduts  
       2016-01-20 18:48:21 +08:00 via Android
    @kokutou +1 ,直到我闲的无聊,翻看了 arduino 的某个 c 文件,才恍然大悟。

    内容大抵就是
    main()
    Setup();
    for(;;)
    loop();

    大括号太难翻,不打了。
    jerkzhang
        13
    jerkzhang  
    OP
       2016-01-20 18:49:18 +08:00
    @dingsoung 对,就是玩玩儿
    gdtv
        14
    gdtv  
       2016-01-20 18:51:56 +08:00
    @mlhorizon 说得很对啊,想当年玩单片机,代码就是 loop ,如果不 loop 就是死循环了
    jerkzhang
        15
    jerkzhang  
    OP
       2016-01-20 18:54:30 +08:00
    @kokutou + @xmoiduts +1

    有很多东西我发现出奇的异曲同工
    从 arduino 到 processsing (对 opengl 等图形库的封装) 到 cocos2d 等很多做游戏的框架的核心内在框架 等,内在的结构出奇的一致 啧啧啧……
    jerkzhang
        16
    jerkzhang  
    OP
       2016-01-20 19:01:48 +08:00
    一个大的循环, 复杂的状态机, 中断系统等等 //更加适合把逻辑放在完整的操作系统里,用更加高效的开发语言来实现功能,完全不受到“循环”的限制,更加复杂的多线程程序、更加复杂的功能应用的嵌入都可以,不过对于高度协同化的场景并不适合。
    Cu635
        17
    Cu635  
       2016-01-20 19:02:35 +08:00
    硬件性能很敏感的

    甚至一个电容的成本都得能省就省
    jerkzhang
        18
    jerkzhang  
    OP
       2016-01-20 19:04:42 +08:00
    @Cu635 你说的很对,不过也有些场景对性能和成本不敏感,对于快速的原型迭代,以及逻辑更加复杂而可变性强的一次性工程。对于做硬件产品,确实性能和成本很重要。
    wadahana
        19
    wadahana  
       2016-01-20 19:05:53 +08:00
    楼主的目的难道是为了卖传感器模组?
    jerkzhang
        20
    jerkzhang  
    OP
       2016-01-20 19:13:00 +08:00
    @wadahana 我不想卖传感器模组,以后全都免费开源给其他人去卖,不打算指望这赚钱。你想想,如果一切的硬件都有类似软件包一样的 tutorial 和 reference ,只要插入电脑,就可以轻松在正常程序中调用那该多方便,比如一个机械手,我不用写底层的程序,我直接在脚本语言层面上就能轻松调用他去做一些事情,那该多方便,我再也不需要重新用 arm 来做个机械手,然后还要花好长时间来调试等,多方便啊,其实现在也是有这一类的硬件,只是没有标准化,以及在嵌入到正常程序的这个过程做的不完美,以及缺乏各个语言的 sdk 。只为兴趣、不为盈利。我目前就烧了 10 套。
    am241
        21
    am241  
       2016-01-20 19:26:59 +08:00
    循环是有效状态机的宿命
    Shy07
        22
    Shy07  
       2016-01-20 20:33:16 +08:00
    @mlhorizon 写过游戏的表示,很正常啊
    qhxin
        23
    qhxin  
       2016-01-20 22:13:38 +08:00
    @jerkzhang 当然趋势是你说的这样的,要具体情况具体分析,毫无疑问的,有 C 我肯定不会写机器指令,有 java 我肯定不会写 C ,因为人都有惰性,不过话说回来,懒惰也是推动社会进步的一个因素。还有能多报点造价多拿点预算也是挺滋润的。。不过如果按照你这样封装的话,我觉得最多就是一个学习工具了。或者你可以尝试做成中间件,这样底层硬件可根据不同需求自己定制,也方便开发人员。
    jinsongzhao
        24
    jinsongzhao  
       2016-01-20 22:14:16 +08:00
    讲得别人看不明白是因为楼主进入了一个丰富和绚丽的世界,但是还没走出来,等能用大白话就能讲明白的地步,就是更高级的境界了。这个世界的描述,让我想起个术语叫物理引擎,通过软件就能模拟出物体的碰撞,压力,弹力,阻力。如果这个物理引擎能计算成千上万的,甚至上亿的物体;如果除了物理引擎,还可模拟温度,流体等,那我们用软件模拟出来的零件,如果可以组成机器人;如果这些软件模拟的零件,在现实世界里能制造出来,那么我们在这个虚拟世界里组成的机器人,实际上就已经成品了,将这些代码从虚拟世界里提取出来,灌入到真实的零件里,就是真实的机器人了。
    wadahana
        25
    wadahana  
       2016-01-20 23:12:17 +08:00
    @jerkzhang 首先我个人是非常支持你的想法和付出的劳动,前两年搞智能家居的案子玩弄了上百种传感器、通讯模块,每次拿到一个新的模组都想尽各种办法把传感器飞到 STM32 上写 demo 测试评估功耗性能,有你这样的平台,评估模块是会相当方便的。
    jerkzhang
        26
    jerkzhang  
    OP
       2016-01-20 23:34:47 +08:00
    @qhxin 确实是一个中间件,而这样的封装,就是为了把逻辑层全放在 miniPC 上,不同的硬件组件都接入 miniPC 中,有一些场景是不需要不同的组件必须封装在一个有限的空间里,比如停车场的闸道系统是分散式的,用 miniPC 去统筹不同的硬件更加合适,以及 miniPC 内会有更加复杂的逻辑,比如假设 opencv 进行车牌识别或者针对该客户而加入更多定制化的功能。 这东西就是玩意儿,也不必太在意,说实话,我只是觉得目前很多的硬件模组缺乏统一严明的 api 接口,经常各种模块的资料都是不全,有时找到厂家厂家都可能没有,对方直接说他没有文档,但他可以电话上跟你说。我其实是觉得非常有这些方面的需求而已。
    acalarolo
        27
    acalarolo  
       2016-01-20 23:42:51 +08:00
    超大循环 + 很多计数器 + 很多定时器
    Arduino 的实时性已经比较差了。最近图省事用了它,目前有些后悔。
    jerkzhang
        28
    jerkzhang  
    OP
       2016-01-20 23:51:12 +08:00
    @wadahana 终于找到理解的人了,你说到了我的心坎上了,我也是对这个有非常大的需求,才搞了搞,个人能力与劳动是有限的,我其实更希望是这种思想可以影响到各种硬件模块的开发者或者厂商,如果这些模组能有像普通的软件层面的开源社区里的详细的 tutorial 、 reference 甚至是 cookbook ,那会方便很多,否则大家都要重新在 XX 模块上付出学习成本。我做这个不是去替代真正的硬件工程师做的硬件开发,它使想针对硬件被应用的层面上。换句话说,他不是去开发硬件,而是利用硬件去开发。前者做的是底层,后者做的是应用层。为了相对来说不影响硬件模组的性能(必定会影响),基本上都是采用共享内存的方式去做。 (这东西是业余做的,加在一起花了一两周的时间,都是同学朋友一起互相帮忙的,朋友里也有纯做硬件的,确实是和纯粹做硬件不是一样的,甚至相斥,所以做这个也势必会有争议,今晚本来很郁闷,饭后恍然发现还是有支持与主动参与开发的人,瞬间就有精神了。)
    jerkzhang
        29
    jerkzhang  
    OP
       2016-01-21 00:00:18 +08:00
    @acalarolo 对的, arduino 实时性确实是有问题,那就是一个单线程的程序,按照顺序来回大循环。用这个能否解决实时性问题,我没测过,虽然说应该不如 arduino 的实时性,但如果你大循环的时间主要耗费在的计算或者说你的实时性问题是协同性问题的话,我觉得可以尝试着利用这种方式去做,只是不能完全用我的这个 api ,要按照这种方式重新从底层写,而且要解决 PC 层的内存管理、进程间通信等问题,还是有点麻烦。个人从你的描述“很多”感觉应该是协同性的问题,我觉得可以利用这种思想来试试。把“循环”的限制脱掉。
    zjqzxc
        30
    zjqzxc  
       2016-01-21 09:25:54 +08:00
    其实觉得 arduino 已经够简单的了。。想用什么模块基本都有现有的库,直接搜索-下载-调用就行了。。
    大概看了一遍,感觉好像是 传感器-Evepi-计算机 这么个架构
    然后 evepi 充当串口转换(广义,指一切信号想办法都转换成串口)的功能
    不过好像大部分情况下程序的逻辑都没有复杂到必须要上一台 x86 的电脑吧。

    之前 tb 上买过一个 usb 接口的 ds18b20 ( ch340 串口芯片, mcu 型号不清楚,没拆),串口直接 cat 能得到温度值,大概就是楼主说的这个意思了吧。。

    另:“我就是把电路板层面的事情都做完了打包成模块了”:目前 tb 上打包成模块的传感器一把一把的,零件方式大概有 iic , spi,onewire ,直接输出模拟信号的;少数器件自己定义传输方式( DHT11 , 22 );然而 arduino 都提供了现成的库,直接调用即可。。想要用计算机控制: Serial.begin 然后 Serial.print
    传感器模块和 arduino 连接就几根杜邦线就搞定
    所以说,并没有感觉到这个东西和 arduino 相比有什么优势;
    价格:我见过的最便宜的 arduino digispark 好像 7 块钱左右, arduino uno r3 大概 18 块钱,不知道 evepi 准备卖啥价
    mx1700
        31
    mx1700  
       2016-01-21 10:40:45 +08:00
    赞同楼上, arduino 已经非常简单了,只要有编程基础,很快就能上手。
    jerkzhang
        32
    jerkzhang  
    OP
       2016-01-21 14:42:47 +08:00
    @zjqzxc 对 arduino 很快,只是我很懒,我想要更快,我要的是用元件而直接得到结果或者实现某个动作,连线与烧进 arduino 是很上手快,但依然费时间, arduino 已经打破了软硬的隔离,为何不可更进一步。至于价钱,成本是多少就多少,不指望这个赚钱。
    jerkzhang
        33
    jerkzhang  
    OP
       2016-01-21 15:12:12 +08:00
    @zjqzxc 如果抱着学习硬件,肯定还是最好直接用 arduino ,如果是抱着只是想快速实现一些什么,肯定是有更现成的模组更好。目前很多社会上的模组,都缺乏标准的接口说明与调试与应用的 sdk ,这样所有的人都要在这些环节耗时间,如果硬件的模组的厂家都养成标准化的习惯,那很多人都会受益。并不打算卖这个赚钱,只是希望进一步让更多人意识到这种必要性。
    wule
        34
    wule  
       2016-01-23 04:15:05 +08:00
    楼主这东西和 Arduino 没多大差别吧,相当你于把硬件做了,接口做了,剩下就都是软件的事了,都按一定的标准来做就好了,相当于把底层包装了。不过真正想玩的,或者想做和硬件相关的东西, lz 的想法也满足不了大多数的需求,所以这个只能玩玩而已。
    jerkzhang
        35
    jerkzhang  
    OP
       2016-01-27 15:21:19 +08:00
    @wule 对的,满足不了全部的需求,满足需要满足的需求即可。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 01:11 · PVG 09:11 · LAX 17:11 · JFK 20:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.