定下功能

愿星空

因为学期前的暑假还有刚开学的时候都在做 愿星空 (一个用来许愿的地方,启发于让我很惊讶的许愿墙网页——真的是每天都有很多人在上面许愿),本着把做过的事情和打算要做的事情结合起来的原则,便决定做一个和愿星空 有关系的东西。

脑子里面的一个小揪揪

有几次独自在晚上的地铁上用手机听音乐听到没电的经历,戴着耳机却没有声音从中出来,只有旧地铁和轨道摩擦发出的声音,哐哧哐哧。手抓着耳机插头,想着要是地铁能有一些耳机插孔,而每一个插孔都能播放不同的歌曲,这个时候我就能够被“拯救了”。

以这个为起点,我开始对“遍地皆是的能和人产生不可预知的互动器件网络”这个概念开始感兴趣,笔头落下,想到一个简单可行的例子,将一种“特别”的二维码贴到北京的各个地铁站里,这种二维码链接着不同散文,每扫一次能够随机获得其中一篇散文。

还有一个不太实际的例子(模仿《her story》),同样是链接到文字上,但每一个二维码背后是一个被合理地拆分的故事的一个片段,扫码能够获得其中一个片段,如果想要了解更多,则需要根据手上的片段选取关键词来在一个经过设计的搜索系统中进行搜索,其中只有被人扫码获得过的片段才能被搜索的,如果想要阅读某个片段,则有两个方式:1. 和片段拥有者交换手上的片段。2. 在某时某地去扫某个特定的二维码

后台在这期间能够不断地修改、添加故事片段,对体验进行调控。

模仿得再不要脸一点的,那二维码背后可以放像《放逐之日》- 凉炘一样是个记者追查某个未知事件的采访记录,这样确实是比较合适的。

话说多了。总之大概那么想了一下,便决定做个简单的许愿器件。

一些很有用的笔记

  • 顶层宏观分析

  • 选型

    • 初学者还是使用比较常用的社区比较完备的芯片吧

  • 电源相关

    • 低功耗器件两个常见的电压: 5V 、3.3V

    • USB : 5V

    • 多数CPU、内存的工作电压:3.3V

      • 5V 的 2/3

  • 难度系数

    • 原理图 > PCB

      • 原理图依靠 知识 和 经验

      • PCB

  • 原理图

    • 器件连接

      • 可以参考芯片的参考设计

      • 文档中

      • 设计范例

      • 分享的设计文件

  • PCB

    • 地 和 电源 的线尽量的宽

      • 不低于50mil

    • 过孔不要太小

    • 没有被使用的引脚

      • 可以引导插座上方便将来拓展用

    • 电源

  • 电阻、电容...

    • 0603型号

如果再做感觉依然是个难点的地方

  • 选合适器件

    • 避免功能过剩

  • 原理图绘制

    • 器件之间的连接

      • 引脚的之间连接

      • 以及连接的电阻、电容等其他的值

    • PCB

      • 器件的PCB获取/绘制。

硬件设计

硬件选型

功能分析:

  • 输入:

    • 音频模拟信号

  • 输出:

    • wifi上传音频PCM数据(或别的)

  • 处理:

    • ADC、

    • WIFI传输、

    • 处理器、

    • 小按键

硬件挑选:

老师上课教导我们大致要按以下标准来选取器件:

  • 功能

  • 成本

  • 能耗

  • 体积

  • 可靠性

因为TI可以很方便地申请样片并且文档比较全,因此主要在TI中挑选,但在对嵌入式基本没有了解下只能“大胆”地根据搜到的资料按照自己的设想来挑选了。我挑选了一批之后,拿去请教老师,再调整清单,反复几次,最后在老师的指导下定下这些基本的器件,处理器选择了廉价而受欢迎的wifi模块esp8266:

  • ADC: tlv320adc3101

  • wifi传输、处理器:esp8266

  • 电压转换:略

原理图

最终原理图:

  1. 按键、开关

  2. 遇到的问题:8266和tlv320adc3101的连接

    • 老师的指导

    • 参考8266的文档 [安信可科技
      ](http://wiki.ai-thinker.com/do...

    • 网上社区

电源相关:

  • 参考TiDesign完成了电压部分(usb电源、电源转压线路)的连线以及地线。

  • 使用 miniUSB 接口作为电源接入 5V

    • 添加一个开关控制供电

    • 并且添加了LED作为供电指示灯

  • 芯片3101 和 芯片8266 工作电压在3.3V左右。芯片3101 还额外需要一个1.8V的供电。

    • 因此需要两个转压模块

      • 5V -> 3.3V

      • 5V -> 1.8V

  • ADC需要处理模拟信号和数字信号因,需要一个模拟电/地和一个数字电/地。

    • 电:通过将3.3V电压分成两路分别串联一个电容来实现。

    • 地:通过将地分成两路分别串联一个0欧电阻来实现。

  • 添加了一个去耦电路来使电源工作得更稳定。

  • 老师的指导

3101 与 8266的连接:

3101部分

8266部分

  • ADCRST

    • 3101的使能端受8266的控制

  • SCL & WS

    • SCL

      • I2C 的 串行时钟线

    • WS

      • 主时钟输入

      • 读3101的文档也没了解清楚

      • 或许是作为3101内部其他工作所需频率(除了音频串行数据和I2C之外)的主要来源。

    • 使用同一个接口?

      • 按照论坛上的回答似乎是可以的

        • elecfans

        • eeworld

      • 但仔细想想感觉不太对。或许等待进一步的测试吧。

  • SDA

    • I2C 的 串行数据线

  • DOUT

    • 音频串行数据输出(从3101到主芯片)

  • BCK

    • 音频串行数据输出的bit时钟

  • 音频串行数据 VS I2C

    • 按照我目前的理解来解释

    • I2C 是 8266 控制 3101的时候使用的通道

    • 音频串行数据 是 8266获取 3101 处理完成后的音频数据的通道

按键及其指示灯:

  • 按键给了用户操作的空间

    • 在软件上通过动态检测工作状态可以赋予一个按键多个功能

  • 电源开关

    • 控制电源的开关

    • 一般建议带有一个LED指示灯

  • 录音开关

    • 常置高 按下是置地

      • 常置地 按下是置电?

        • 感觉应该不行,就算按下了接通的电也会流进地里。

    • 接入处理器8266的GPIO4

      • 通过软件来检测GPIO4的电平变化来触发不同的工作事件

        • 第一次按下 -》

          • 如果已经连上wifi并且能够正常上传,则开始录音

          • 如果不能上传,则不开始录音,指示灯闪两下

        • 录音开始7秒内再按下 -》 停止录音

        • (软件中)7秒后 -》自动停止录音

        • (软件中)上传文件途中按下按键 -》 不录音

        • 录音状态的提示

          • 通过与8266的GPIO5连接的LED来表示

          • 灭:未在录音

          • 亮:正在录音

          • 闪烁:正在上传中

        • 闪两下:未联网

3101 与 耳机插孔的连接:

  • 计划通过方便的耳麦来录音于是选用了3.5mm接口的耳机插孔

    • 耳机插孔的说明网上看了很多,但是有些地方彼此矛盾,或许该找个时间好好学习一下

    • 耳麦输入的是模拟信号,因此插座的地接到了 模地 上

  • 按照3101的文档中的典型应用使用IN1L(P)作为音频的单输入

插座:

  • 将8266和3101空置的引脚引到插针上,方便拓展以及调试功能调整

3101插座

  • 按照3101的引脚的功能分成了:

    • I2C : I2C传输

    • GPIO : GPIO

    • IN2 : 一对音频信号输入口(二号)

    • IN3 : 一对音频信号输入口(三号)

    • ADR : 电子音频信号输入口

    • CTR : RST + 主从连接

8266插座

  • 作为处理器,分出了必要的工作模式选择和UART下载

    • UART下载

      • 3.3 + GND

      • TXD0 + RXDO

    • 工作模式选择

      • 参考文档中的模式说明

        • 将GPIO15常置地,GPIO2常置高

        • 通过将GPIO0引到插座上,通过插针来切换“高”与“地”

PCB

建立PCB工程:

  • 一开始没有“PCB”的概念

    • 惑:

      • 听老师示范讲解之后还是有点一知半解地感觉

    • 奋:

      • 回忆着老师的步骤在原理图的基础上建立PCB工程,但是一直报错没有成

    • 遂:自己去探索

  • 《AD完全指南》

    • 奋:

      • 于是去图书馆借了本《AD完全指南》

      • 读着书慢慢操作

        • 按照提示信息爆出的错误去修改原理图

        • 按照书的教程,先生成报表再建立PCB工程

      • 总算能够建立PCB工程

构建PCB库:

  • TI芯片的PCB封装

    • 因:

      • 听说TI的器件,TI都会直接提供其PCB封装

    • 但:

      • 在器件的文档中没有看看“PCB封装”的字样

    • 奋:

      • 到TI论坛去提问

      • 到网上找教程

      • 看TI的帮助文件

    • 遂:

      • 发现TI提供了一种文件格式和一个转换软件

      • 可以通过软件来处理文件从而导出需要的 PCB封装 的文件类型

  • 8266的PCB

    • 获:

      • 店家提供

  • 电阻、电容、的型号需要更改

    • 原:

      • 一开始直接使用AD默认的器件封装

    • 后:

      • 老师提醒能够提供“0601”型号常用元件

    • 遂:

      • 在原理图中修改相关元件对应的封装,然后更新PCB图

  • 耳机插孔以及USB插座

    • 挫:

      • 没有想到USB、耳机插座这样常用器件的封装都散落在网络各个角落,竟没有一个大而全的仓库包含。(或许是我没有发现)

    • 获:

      • 最终通过自己绘制 和 老师提供的封装 获得。

  • 拓展插座

    • 绘:

      • 以AD自带的插座的 PCB封装 为基础按照需要的针数做出调整

绘制PCB版:

  • 自动布局?

    • 原:

      • 一开始想要图方便打算使用AD的自动布局功能

    • 后:

      • 自动布局功能没有反应

    • 调:

      • 发现要开启自动布局功能必须要设置好规则并且画好布局范围

    • 实:

      • 自动布局完之后的布局根本不能用。

    • 遂:

      • 决定手动布局

  • 谨慎保险地布局策略

    • 因:

      • 本着 线路太靠近可能会彼此干扰 以及 线路越大越好 的原则。

    • 决:

      • 决定将器件放得散散的,让线与线之间能有更多的空间。

  • 自动布线?

      • 自动布线能够正常工作并且布置的效果尚可

      • 但是不能(或者我不会)对其中电源和地的线路进行宽度定制

      • 如果想要扩大电源和地的线宽必须手动调整

      • 而手动调整实际上需要修改更多的线

      • 工程量与手动布线差不了多少

  • 全手动布线

      • 虽然看起方法比较笨

      • 但好在心里踏实,知道自己大概还要多少事件就能布完线

    • 规:

      • 基本遵循以下规则:

        • 先布电源和地线

        • 然后是芯片之间的连线

        • 其他

  • 修改布局

    • 因:

      • 之前的布局过于松散,成本会升高。

    • 遂:

      • 需要再次修改布局:更紧凑的布局方式

  • 再次布线

    • 因:

      • 有了上一次布线的经验,我有了更多的精力处理其他的部分。

    • 遂:

      • 在布线中也同时能够调整一些布局

      • 并且在 布线 <--> 调整布局 之间反复中最终完成PCB板的绘制

PCB板印刷:

  • 最终成品:

    • PCB图:

    • PCB板:

      • 正面

      • 背面

    • 工作板

      • 正面

      • 背面

软件测试

固件烧录

参考着各种教程慢慢啃下来。

固件编译

参考

ESP8266 最新SDK发布

  • 基本的电路焊接好之后尝试着烧录程序却无法烧录进去

      • 电脑的串口调试工具能够识别到串口的连接,并且能够通过AT指令进行控制

软件调试

  • 一开始打算使用乐鑫原产的SDK通过AT指令来让芯片工作

      • 能够作为STATION连上wifi,作为AP提供WIFI

      • AT指令功能有限而且我自己也不是很会用。

      • 乐鑫提供的工作环境也不是很好用。

      • 决定使用nodeMCU框架

  • 使用nodeMCU框架

      • NodeMCU是在微控制器上运行LUA的固件引擎。目前支持ESP8266Ex芯片及其模块。

      • 如果通过LUA开发,可以直接通过串口协议链接终端即可。

      • 与普通串口设备不同的是,所采用的控制指令不是ATA,而是LUA脚本。

      • 理论上讲,通过ATA脚本可以模拟出多种设备的指令集,而且可以通过WiFi进行远程控制。

      • nodeMCU是怎么出来的呢?我大概猜了一个思路

        • 低廉的芯片 -》 适合业余爱好者玩耍 -》 大部分业余爱好者很可能是软件工作者 -》 更适合软件工作者的方式

        • 类似 Arduino

      • 按照比较久远的帖子烧入的比较旧版本(0.9.6-dev_20150704- Z5)的nodeMCU编译文件之后在能够在串口调试工具通过Lua语句来控制器件。

        • 例如:print("WOW')、以及控制8266上的小蓝灯

      • 这个旧版本没有比较傻瓜的http模块

        • 一个指令http.get()完成任务

      • 需要获取新版本的编译包

  • 新版本的编译包

      • 通过nodeMCU的云编译服务获得了新的编译包

      • 编译完成之后烧录进去,芯片却不能工作

        • 疯狂地输出乱码

      • 通过在nodeMCU的github项目里发现了相关的问题

      • 发现在nodeMCU的API文档中的章节#Upgrading Firmware中以及有提到这个问题

        • 当从nodeMCU的的 0.X版本 -》 1.X版本升级的时候

        • 因为框架基于的乐鑫SDK从 1.5 -》 2.0

        • 因此得将 乐鑫SDK 2.0 和新版本的nodeMCU编译包 一并烧进去一次才能完成升级。

      • 成功烧录

      • 调试成功

  • 使用新版本的编译包中的http()模块

    • 不能

      • 使用

      • HTTP CLIENT: error(x)各种error

        • DNS 解析失败

        • error : 8

        • error : -11

      • 提issue搜Google

        • issue#1704 nodemcu-firmware

        • 发现很多http()模块本身不太稳定

      • 使用net模块,参考nodeMCU官网的例子

        -- A simple http client
        conn=net.createConnection(net.TCP, false)
        conn:on("receive", function(conn, pl) print(pl) end)
        conn:connect(80,"121.41.33.127")
        conn:send("GET / HTTP/1.1\r\nHost: www.nodemcu.com\r\n"
        .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")
      • 无视掉dns解析无效的问题,直接使用ip地址能够实现传输功能(但不稳定,时成功时不成功)

        • 能够成功 GET 到野狗的json数据

        • 并通过POST 方法修改野狗的json数据

        • 野狗提供的[REST API] (https://docs.wilddog.com/api/...

  • 成果展示

    • 通过http-post方法修改 wishwall.wilddogio.com/-KRmORJEhD6EV3fo6j_f.json 这个节点节点

      > conn:send("POST /-KRmORJEhD6EV3fo6j_f.json HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nHost: wishwall.wilddogio.com\r\nContent-Length: 16\r\n\r\n{\"value\":\"aini\"}")
      > HTTP/1.1 200 OK
      Server: nginx
      Date: Thu, 12 Jan 2017 06:13:00 GMT
      Content-Type: application/json;charset=UTF-8
      Transfer-Encoding: chunked
      Connection: keep-alive
      Keep-Alive: timeout=75
      Access-Control-Allow-Origin: *
      Access-Control-Allow-Methods: PUT,OPTIONS,DELETE,POST,GET,PATCH
      Access-Control-Allow-Headers: Content-Type1b
      {"name":"-KaGIhUcpea1i7cQ"}//post 也成功了。
    • 成功添加{value:"aini"}

总结

    • 感谢老师!

      • 没有老师的耐心的帮助我想各种方面都很难进行下去!

    • 收获颇多!

      • 走了一遍下来,至少对于嵌入式开发有了一个骨架式的了解。之后学习计算机知识,能够更宏观综合的眼光。

      • 自学能力 以及解决问题的能力得到了锤炼。

      • 作为“世界创客中心”深圳人感觉有了基本的素养了。

    • 虽然很有成就感,但是在未知中摸索得感觉实在是颇为疲惫,倒不会说“累感不爱”,但至少现在稍微有点不想去继续调试。或许在学习更多相关知识之后再进行下去也不定。

嵌入式系统设计与制作报告相关推荐

  1. 嵌入式计算机课程设计,嵌入式系统设计课设报告.doc

    嵌入式系统设计课设报告.doc 福州大学嵌入式系统设计课设报告书题 目 基于28027的虚拟系统 姓 名 学 号 学 院 电气工程与自动化学院 专 业 电气工程与自动化 年 级 起讫日期 指导教师 目 ...

  2. 干货:嵌入式系统设计开发大全!(万字总结)-道合顺大数据infinigo

    01 嵌入式系统设计方法变化的背景 嵌入式系统设计方法的演化总的来说是因为应用需求的牵引和IT技术的推动,随着微电子技术的不断创新和发展,大规模集成电路的集成度和工艺水平不断提高.硅材料与人类智慧的结 ...

  3. 嵌入式计算机图形学入门书籍,蹭课:嵌入式系统设计计算机图形学

    回头看看日记本上研究生的生活,挺有意思的,我居然去蹭过课,哈哈,都 不太记得了: 以下是日记正文: 在我的课表上,今天的课程还没开,就跟着英子去蹭课--上午嵌入式系统设计,下午计算机图形学,都是半天半 ...

  4. 嵌入式系统课程设计报告

    嵌入式系统课程设计报告 题目7(序号) 学生成绩查询系统(题目)              专    业:软件工程 班    级:   软件二班    姓    名:xx    学    号:     ...

  5. 【小梅哥SOPC学习笔记】Altera SOPC嵌入式系统设计教程

    Altera SOPC嵌入式系统设计教程 第1章 概述 SOPC(System On Programmable Chip,可编程的片上系统)是Altera公司提出来的一种灵活.高效的SOC解决方案.它 ...

  6. 嵌入式系统设计的问答

    嵌入式系统的概念 嵌入式系统的基本架构 嵌入式操作系统的基本组成和分类 嵌入式数据库管理 嵌入式网络 嵌入式系统设计的核心技术 嵌入式系统软件的设计流程 嵌入式软件设计模型 嵌入式系统软件开发环境 1 ...

  7. 干货:嵌入式系统设计开发大全!(万字总结)

    出品 21ic中国电子网 付斌整理 网站:21ic.com 01 嵌入式系统设计方法变化的背景 嵌入式系统设计方法的演化总的来说是因为应用需求的牵引和IT技术的推动,随着微电子技术的不断创新和发展,大 ...

  8. 系统架构设计笔记(64)—— 嵌入式系统设计

    嵌入式系统设计的主要任务是定义系统的功能 . 决定系统的架构,并将功能映射到系统实现架构上.这里,系统架构既包括软件系统架构也包括硬件系统架构.一种架构可以映射到各种不同的物理实现,每种实现表示不同的 ...

  9. 嵌入式linux设计报告,嵌入式linux课程设计报告

    嵌入式linux课程设计报告 重庆科技学院 课程设计成果 院(系):_电气与信息工程学院_ 班 级: 计科普0802 学生姓名: 庄桐泉 学 号: 2008441067 设计地点(单位)___ _I3 ...

最新文章

  1. linux apache cpu,linux – Apache使用100%的CPU. “ps”命令可以告诉我它在做什么吗?...
  2. 精通python能干嘛-很多人说精通Python?对于精通我们存在哪些误区
  3. Safari浏览器的智能跟踪预防工作原理
  4. php 获取发票内容,php – 如何从发票ID获取PayPal交易ID
  5. linux之通过grep使用or、and、not操作
  6. 摇杆控制方向原理_图文全面讲解多种方向控制阀的原理和区别....
  7. Mysql密码忘记了怎么办?
  8. LeetCode 84. 柱状图中最大的矩形(Largest Rectangle in Histogram)
  9. Linux脚本5秒后启动程序,嵌入式Linux启动时间优化的秘密之四-启动脚本
  10. 2DToolkit官方文档中文版打地鼠教程(一):初始设置
  11. jmeter校验结果_Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
  12. 在 Azure 虚拟机上快速搭建 MongoDB 集群
  13. 同一个二维码支持多种支付的实现思路
  14. 数据仓库如何保证数据一致性
  15. 微信网站域名如何做防封和防屏蔽技术
  16. IE无法打开网页的问题
  17. java在线运行工具,终于搞明白了
  18. 申宝在线炒股医药板块大涨
  19. sheel命令学习和工作总结
  20. 初步了解jquery mobile

热门文章

  1. 利用JavaScript实现一个简单的猜数字游戏
  2. 太阳光轨迹软件_轻松画太阳视运动轨迹
  3. uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。
  4. ElasticSearch ingest-geoip插件
  5. 计算机专升研学院推荐,【解析】专升硕院校专业推荐
  6. 数字图像处理——第九章 形态学处理
  7. 神奇的幻方(洛谷)c语言
  8. js轮播图片小圆点变化_用jQuery实现圆点图片轮播效果
  9. 在线便携小风扇链接,带给你清凉一夏
  10. Apache Druid历险记