首页:修订间差异

来自资料库(何亚红)
跳转到导航 跳转到搜索
 
(未显示同一用户的92个中间版本)
第1行: 第1行:
== 常用项目 ==
=== 嵌入式项目 ===
{| class="wikitable sortable"
!名称
!简介
!Wiki(若有)
!标签
|-
|ExtBoard-001
|扩展板,用于扩展一个可编程通道(RS485)。
主要采用以下芯片:
* CH334R:USB Hub。
* [[Air32F103CCT6]]:DAPLink主控芯片、Core主控芯片。
* MAX3485:3.3V电源驱动的RS485收发芯片。
|[[ExtBoard-001]]
|
* [[USB]]
* DAPLink
* [[Air32F103]]
|}
== 常用技术栈 ==
== 常用技术栈 ==
=== 可连接TCP/IP的物联网设备 ===
=== 可连接TCP/IP的物联网设备 ===
开发物联网设备时,无论设备是通过WiFi、2G/3G/4G/5G或以太网连接网络,如设备支持TCP/IP,通常采用MQTT作为主要通信协议。<br>
开发物联网设备时,无论设备是通过WiFi、2G/3G/4G/5G或以太网连接网络,如设备支持TCP/IP,通常采用[[MQTT]]作为主要通信协议。
相关WiKi:<br>
 
* [[Paho.mqtt.embedded-c]]
除了主要通信协议,通常物联网设备还需要支持NTP对时,有时还需要使用到Http作为辅助协议。
* [[SimpleMQTTGateWayStack]]
 
<br>
主要使用的协议如下:
除了主要通信协议,通常物联网设备还需要支持NTP对时,有时还需要使用到Http作为辅助协议。<br>
{| class="wikitable"
!协议名称
!说明
!备注
|-
|[[MQTT]]
|MQTT是专门针对物联网开发的轻量级传输协议。
|通常采用TCP,可实现实时控制。
|-
|[[LwM2M]]
|LwM2M是一种轻量级的、标准通用的物联网设备管理协议,可用于快速部署客户端/服务器模式的物联网业务
|通常采用UDP,常见于NB-IOT模块。
由于UDP的在公网上的老化(公网的NAT转换机制),在公网上不能实现实时控制,只能应用于周期上报的设备。
 
在专网或者局域网内可实现实时控制。
|-
|[[CoAP]]
|CoAP是一种用于受限节点与受限网络的web传输协议,由IETF提出。
|通常采用UDP,可使用DTLS加密,一般情况下用于在受限环境中替代http。
|-
|Http/Https
|超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议。
|通常用于调用后端服务器的api接口。
|-
|NTP
|NTP是用来使计算机时间同步化的一种协议。
|
|}
 
==== 低成本方案 ====
低成本方案主要是指硬件采用SOC方案并且操作系统采用嵌入式操作系统的方案或者外设方案:
 
* [[Air724UG]] :4G模块,可使用C/C++进行二次开发。
* [[Air780E]]:4G模块,EC618平台,可使用C/C++进行二次开发,较Air724UG廉价。
* [[ESP8266]] : WIFI模块。
* [[ESP32]] : WIFI模块,可接以太网PHY实现以太网上网。
* [[W600]] : WIFI模块。
* [[W800]] : WIFI模块。
* [[CH579]] : 自带以太网PHY,可实现以太网上网。
*[[W5500]] :全硬件以太网外设芯片,需配合主控使用。
 
==== 一般方案 ====
一般方案主要指资源相对充足的方案,一般采用Linux作为内核:
 
* [[MT7688]] :可采用以太网或者WIFI联网,通过USB可接4G上网模块通过RNDIS上网。
 
=== 带交流计量功能的设备 ===
=== 带交流计量功能的设备 ===
==== 单相SOC方案 ====
==== 单相SOC方案 ====
第14行: 第82行:
此类SOC通常可以使用内置的模块完成包括计量功能在内的大部分需求,在某些情况下也可开发高精度的直流计量设备。<br>
此类SOC通常可以使用内置的模块完成包括计量功能在内的大部分需求,在某些情况下也可开发高精度的直流计量设备。<br>
如需与其它设备进行交互,通常还需要添加通信模块或者使用串口通信。<br>
如需与其它设备进行交互,通常还需要添加通信模块或者使用串口通信。<br>
若使用串口通信,本人常用Modbus RTU作为具体协议,将具体的硬件资源映射为线圈(可读写的位)、输入线圈(只读的位)、保持寄存器(可读写)、输入寄存器(只读)。<br>
若使用串口通信,本人常用[[Modbus]] RTU作为具体协议,将具体的硬件资源映射为线圈(可读写的位)、输入线圈(只读的位)、保持寄存器(可读写)、输入寄存器(只读)。<br>
* [[SimpleModbusRTUPacket]]
* [[SimpleModbusRTUPacket]]
==== 单相非SOC方案 ====
==== 单相非SOC方案 ====
第30行: 第98行:
软件开发方案:
软件开发方案:
* [[ openwrt ]]
* [[ openwrt ]]
在内核设备树(dts)配置中使能需要使用的标准接口,并在openwrt的menuconfig中选中对应的kmod包后,即可使用Linux用户程序(非内核模块)操作硬件设备。<br>
在内核[[Devicetree|设备树(dts)]]配置中使能需要使用的标准接口,并在openwrt的[[Kconfig|menuconfig]]中选中对应的kmod包后,即可使用[[Linux]]用户程序(非内核模块)操作硬件设备。<br>
对于SPI、I2C与UART而言,用户可通过打开/dev目录下的相应字符设备即可使用。<br>
对于SPI、I2C与UART而言,用户可通过打开/dev目录下的相应字符设备即可使用。<br>
对于GPIO而言,可使用sysfs文件系统目录:/sys/class/gpio目录进行GPIO操作。<br>
对于GPIO而言,可使用sysfs文件系统目录:/sys/class/gpio目录进行GPIO操作。
 
=== 基于[[USB]]的外设扩展 ===
对于使用Linux内核的设备的外设扩展,本人较为推崇使用[[USB]]作为外设总线,其优点如下:
 
* 支持热插拔与子设备枚举,无需在设备树中配置所挂接的子设备。
* 可使用hub扩展较多接口。
* 支持[[USB]]的转换芯片较多。
 
一般来讲,对于少量控制数据的传输,[[USB]] 2.0的传输速度就足够了。
 
==== [[USB]] HUB ====
{| class="wikitable"
!芯片系列
!说明
!官网(若有)
|-
|CH334/CH335
|4 口USB 2.0 USB Hub
|https://www.wch.cn/products/CH334.html
|-
|CH338
|7口USB 2.0 USB Hub
|https://www.wch.cn/products/CH338.html
|-
|FE1.1s
|4 口USB 2.0 USB Hub
|
|-
|HS8836A
|4 口USB 2.0 USB Hub
|
|}
 
==== [[USB]] 转换芯片 ====
{| class="wikitable"
!芯片系列
!说明
!官网(若有)
|-
|CH340
|USB转串口/打印口
|https://www.wch.cn/products/CH340.html
|}
 
==== [[USB]] 上位机软件开发 ====
 
* 对于标准外设,可按照标准外设的使用方法,如[[USB]]转串口按照串口的方式使用。
* 对于[[USB]]原生的应用(直接通过端点发送接收数据),可使用[https://libusb.info/ libusb]开发。
* 对于基于[[USB]]的HID设备,若未被其它内核驱动使用,可使用[https://github.com/signal11/hidapi hidapi]开发。
 
==== [[USB]] 嵌入式开发 ====
若未具体说明,本章节中的[[USB]]嵌入式开发指Device端的嵌入式开发,即[[USB]]外设开发。
 
除了各个芯片厂商提供的[[USB]]栈,还可使用以下USB栈用于USB外设开发:
{| class="wikitable"
!USB库
!说明
!官网(若有)
|-
!tinyusb
!开源、跨平台的USB HOST/DEVICE栈
!https://www.tinyusb.org/
|-
!CherryUSB
!小而美的、可移植性高的、用于嵌入式系统的 USB 主从协议栈
!https://cherryusb.readthedocs.io/
|}
 
=== 外壳方案 ===
 
==== 可采用导轨安装的外壳方案 ====
对于电气控制柜、仪表柜、配电箱等,安装导轨是一个极其常见的配件。
 
常用的安装导轨方案如下:
 
* DIN TS35:35×7.5 安装导轨,宽度35mm,深度7.5mm,材质形式为钢、铝、铜等,表现形式为横条状金属片
 
若未特殊说明,导轨均指DIN TS35安装导轨。
 
对于带计量的产品而言,除了设计成插座样式,还可以设计成导轨安装并安放在配电箱里。
 
对于需要安装至导轨的产品而言,主要有以下方案:
 
* 直接使用可用于导轨安装的外壳。
* 采用导轨安装卡扣,卡扣上通常有螺丝孔位,可通过螺丝安装产品。
 
==== 廉价铝壳外壳方案 ====
作为物联网产品(尤其是具有RTU/DTU角色的物联网产品),通常需要一个外壳。一般情况下,可使用铁壳或者铝壳作为外壳。
 
为减小成本,本人一般采用成品铝壳作为外壳。
 
注意:本段落中的铝壳主要指主要外形为长方体,两侧或者顶部具有可拆卸的盖子的壳体,并不泛指所有采用铝作为主要材料的壳体。
 
一般情况下,通常需要给铝壳开孔以引出接口,常用方案如下:
 
* 正面开孔,一般通过厂家定制。仅试样的情况下,价格一般相对较高。
* 侧盖开孔(一面或两面),一般通过厂家定制。仅试样的情况下,价格一般相对较高。
* 采用PCB作为侧盖(一般使用黑色的壳体配合黑色PCB),使用PCB制造开孔。仅试样的情况下,价格相对便宜。
* 一侧不要侧盖。适用于直接引出导线的产品,一般配合灌胶工艺。一般直接用于量产产品。
如需使用导轨安装,可使用导轨安装卡扣固定铝壳。
 
===== 常用尺寸1 =====
{| class="wikitable"
|+铝壳参数
!长
!宽
!高
!PCB块数
!PCB最大厚度
!PCB最大宽度
!PCB最大长度
|-
|100mm
|66mm
|27mm
|2(一块顶部PCB板,一块底部PCB板)
|2mm
|60.3mm(不能小太多)
|100mm(取决于铝壳长度,一般可定制)
|}
[[文件:ALUMINUM SHELL 66x27x100.png|居中|有框]]


== 常用芯片及模块 ==
== 常用芯片及模块 ==
=== 可编程开发的芯片及模块 ===
=== 常用芯片及核心模块 ===
{| class="wikitable sortable"
{| class="wikitable sortable"
|+ 可编程开发的芯片及模块
|+ 常用芯片及核心模块
|-
|-
! 芯片/模块名称 !! 说明 !! wiki(若有)
! 芯片/模块名称 !! 说明 !! wiki(若有)
第46行: 第235行:
|-
|-
| Air724UG || 4G模块,进行C语言开发 || [[Air724UG]]
| Air724UG || 4G模块,进行C语言开发 || [[Air724UG]]
|-
|Air780E
|4G模块,EC618平台,可使用C/C++进行二次开发,较Air724UG廉价
|[[Air780E]]
|-
|-
| ESP-12F || WIFI透传模块,可支持二次开发,主芯片为ESP8266 || [[ESP8266]]
| ESP-12F || WIFI透传模块,可支持二次开发,主芯片为ESP8266 || [[ESP8266]]
第60行: 第253行:
|-
|-
| E18-MS1|| CC2530芯片核心模块,可采用contiki开发或者Z-Stack开发 || [[CC2530]]
| E18-MS1|| CC2530芯片核心模块,可采用contiki开发或者Z-Stack开发 || [[CC2530]]
|-
|Air105
|廉价大内存mcu,4M flash,640K SRAM,Cortex-M4F
|[[Air105]]
|-
|Lichee Zero
|全志V3s开发板,64M DRAM,廉价Linux开发板,V3s芯片可手贴
|[[V3s]]  [https://wiki.sipeed.com/hardware/zh/lichee/Zero/Zero.html Lichee Zero]
|}
|}
<br>
<br>
注意:此章节可能不包含资料较多,应用极其成熟的芯片系列,如STM32<br>
注意:此章节可能不包含资料较多,应用极其成熟的芯片系列。<br>


=== 外设芯片及外设模块 ===
=== 外设芯片及外设模块 ===
第72行: 第273行:
| RN8302B || 三相计量芯片 || SPI || [[RN8302B]]
| RN8302B || 三相计量芯片 || SPI || [[RN8302B]]
|-
|-
| RN8209C/RN8209D || 单相计量芯片 || UART/SPI || [[RN8209]]
| RN8209C/RN8209D || 单相计量芯片 ||
* UART
* SPI
| [[RN8209]]
|-
|-
| NRF24L01+ || 2.4G无线芯片,具有众多兼容替代(如Si24R1) || SPI+GPIO(中断、CE) || [[NRF24L01+]]
| NRF24L01+ || 2.4G无线芯片,具有众多兼容替代(如Si24R1) || SPI+GPIO(中断、CE) || [[NRF24L01+]]
|-
|W5500
|全硬件栈以太网芯片
|SPI
|[[W5500]]
|-
|中景园0.96寸OLED点阵屏
|分辨率128x64,显示驱动(控制)芯片SSD1306
|
* IIC
* SPI+GPIO(DC、RES)
|[[SSD1306]] [[中景园0.96寸OLED点阵屏]]
|-
|AHT20
|温湿度传感器
|IIC
|[[AHT20]]
|-
|DS1307
|RTC(实时时钟)
|IIC
|[[DS1307]]
|}
|}


== 常用软件 ==
== 常用嵌入式操作系统、BootLoader、嵌入式固件及嵌入式软件库 ==
本章节不包含工具类软件(如集成开发环境、编译工具链等)。<br>
 
{| class="wikitable sortable"
{| class="wikitable sortable"
|+  
|+  
第86行: 第312行:
| FreeRTOS || 嵌入式操作系统 || [[FreeRTOS]]
| FreeRTOS || 嵌入式操作系统 || [[FreeRTOS]]
|-
|-
| paho.mqtt.embedded-c || MQTT客户端,可移植到各种芯片平台 || [[paho.mqtt.embedded-c]]
| rt-thread || 物联网嵌入式操作系统 || [[ rt-thread ]]  
|-
|-
| openwrt || 操作系统,嵌入式Linux构建工具 || [[ openwrt ]]
|nuttx||嵌入式操作系统||[[nuttx]]
|-
|paho.mqtt.embedded-c|| MQTT客户端,可移植到各种芯片平台||[[paho.mqtt.embedded-c]]
|-
|openwrt||操作系统,嵌入式Linux构建工具||[[ openwrt | openwrt]]
|-
|u8g2
|单色/点阵屏驱动库
|[[u8g2]]
|-
|U-Boot
|通用引导加载器。通常用于加载[[Linux]]。
|[[U-Boot]]
|-
|Newlib
|嵌入式C运行库(通常配合GCC使用)
|[[Newlib]]
|-
|printf
|printf, sprintf and (v)snprintf 实现
|[[printf]]
|}
|}


== 常用工具 ==
 
==常用工具==
{| class="wikitable sortable"
{| class="wikitable sortable"
|+ 常用工具
|+常用工具
|-
|-
! 名称 !! 说明 !! wiki(若有)/链接地址
!名称!!说明!!wiki(若有)/链接地址
|-
|-
| easy-rsa || 使用SSL/TLS时,自签证书制作/管理工具 || [[easy-rsa]]
|easy-rsa||使用SSL/TLS时,自签证书制作/管理工具||[[easy-rsa]]
|-
|-
| buildroot || 嵌入式Linux构建工具 || [[buildroot]]
|buildroot||嵌入式Linux构建工具||[[buildroot]]
|-
|-
| debootstrap || Linux系统根文件系统创建工具,可创建Debian系Linux系统根文件系统 || [[debootstrap]]
|debootstrap||Linux系统根文件系统创建工具,可创建Debian系Linux系统根文件系统||[[debootstrap]]
|-
|-
| crosstool-ng || 交叉编译工具链创建工具 || [[crosstool-ng]]
|crosstool-ng||交叉编译工具链创建工具||[[crosstool-ng]]
|-
|-
|ScreenToGif
|ScreenToGif
|在Windows下录屏制作gif的工具
|在Windows下录屏制作gif的工具
|https://github.com/NickeManarin/ScreenToGif.git
|https://github.com/NickeManarin/ScreenToGif.git
|-
|Xfel
|全志SOC的FEL工具(可下载固件等)
|[[Xfel]]
|-
|busybox
|unix工具箱,可用于创建体积极小的rootfs
|[[busybox]]
|}
===IDE环境/开发环境/开发工具===
{| class="wikitable sortable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|codeblocks
|免费的C/C++ IDE,可开发多种C/C++程序。本人只要将它用作基于CMake构建的工程的代码编写。
|http://www.codeblocks.org/
|-
|Microsoft Visual Studio
|微软的开发工具集。本人主要用于开发WIN32程序。本人优先使用codeblocks作为C/C++开发环境,VS占用的空间太大,但有些第三方库在Windows上可能只支持MSVC,故而必须使用VS。
|https://visualstudio.microsoft.com/zh-hans/
|-
|keil5
|用于ARM嵌入式芯片的开发。注意:keil5不是免费的。
|https://www.keil.com/
|-
|IAR
|本人主要使用针对ARM嵌入式芯片的开发。注意:IAR不是免费的。
|https://www.iar.com/
|-
|QtCreator
|用于创建基于Qt的程序。
|https://www.qt.io/product/development-tools
|-
|MounRiver
|基于Eclipse的嵌入式ARM/RISC-V的集成开发环境。本人主要用于测试[https://www.wch.cn/ WCH]的单片机。
|http://www.mounriver.com/
|-
|RT-Thread Studio
|一站式的 RT-Thread 开发工具,通过简单易用的图形化配置系统以及丰富的软件包和组件资源,让物联网开发变得简单和高效。本人主要用于开发与rt-thread相关设备。
|https://www.rt-thread.org/
|}
|}


=== 小工具(自写) ===
=== 电子硬件设计(原理图绘制/PCB绘制/其它相关工具) ===
{| class="wikitable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|立创EDA
|高效的国产PCB设计工具,永久免费。可在线使用。
|https://lceda.cn/
|-
|KiCad
|跨平台开源电子设计套装。
|https://www.kicad.org/
|-
|freerouting
|自动布线工具。可配合立创EDA或KiCad使用。本人用于替代立创EDA自带的自动布线。
|https://www.freerouting.app/
https://github.com/freerouting/freerouting.git
|}
 
=== 编译器 ===
{| class="wikitable"
!名称
!说明
!wiki(若有)/链接地址
|-
|sdcc
|用于8位/16位单片机(如MCS51、DS80C390 、HC08、Z80、STM8, MOS 6502 、WDC 65C02等)的C编译器
|https://sdcc.sourceforge.net/
|}
 
=== 流程图/框图绘制 ===
{| class="wikitable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|dia
|跨平台开源流程图绘制工具
|http://dia-installer.de/
https://sourceforge.net/projects/dia/
|}
 
=== 图像处理 ===
{| class="wikitable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|GIMP
|免费开源图像编辑器
|https://www.gimp.org/
|}
 
=== 国际化/本地化 ===
{| class="wikitable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|Poedit
|.po编辑工具。可编辑使用 [[xgettext]] 生成的翻译文件
|https://poedit.net/
|}
 
=== 压缩/解压缩 ===
{| class="wikitable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|7-zip
|开源免费的压缩/解压缩软件。Windows下有GUI程序,Linux下只有控制台版本。
|http://www.7-zip.org
|}
 
=== 虚拟磁盘/磁盘驱动 ===
{| class="wikitable"
!名称
!说明
!wiki(若有)/链接地址
|-
|imdisk
|Windows下开源虚拟磁盘工具,可方便挂载内存盘(存放临时文件)。
|https://sourceforge.net/projects/imdisk-toolkit
|-
|Ext2fsd
|Windows下访问Ext2/Ext3/Ext4文件系统驱动。
|https://sourceforge.net/projects/ext2fsd/
|}
 
=== 安装/卸载 ===
{| class="wikitable"
|+
!名称
!说明
!wiki(若有)/链接地址
|-
|Geek Uninstaller
|Windows下程序卸载工具,具有免费的版本。
|https://geekuninstaller.com/
|}
 
===小工具(自写/修改/组合)===
{| class="wikitable"
{| class="wikitable"
|+
|+
第122行: 第521行:
|[[CC3200_GangGenerator]]
|[[CC3200_GangGenerator]]
|
|
* Windows
*Windows
|-
|-
|WMToolHelper
|WMToolHelper
|W600烧录工具
| W600烧录工具
|[[WMToolHelper]]
|[[WMToolHelper]]
|
*Windows
*Linux (ubuntu 20.04)
|-
|WinBleTool
| Windows下调试BLE的工具
|[[WinBleTool]]
|
*Windows 10(及以上)
|-
|SimpleBLETool
|调试BLE的工具
| [[SimpleBLETool]]
|
*Windows 10+
*Linux(ubuntu 20.04+)
|-
|cutecom-ng
|基于Qt5的串口工具。个人修改版。
|[[cutecom-ng]]
|只要是Qt5支持的桌面平台均支持。
|-
|OneNETTool
|开发OneNET辅助工具
|[[OneNETTool]]
|
*Windows
*Linux (ubuntu 20.04)
|-
|QGDW12184Tool
|开发Q/GDW 12184辅助工具
|[[QGDW12184Tool]]
|
*Windows
*Linux (ubuntu 20.04)
|-
|XServerForWSL1
|利用cygwin中的X服务对WSL提供X服务
|[[XServerForWSL1]]
|支持WSL1的Windows
|-
|linux_binfmt_pe
|使用[[wine]]直接执行PE可执行文件的Linux内核模块
|[[linux_binfmt_pe]]
|
* Linux内核
|-
|Win32Redirector
|重定向win32控制台应用至MSYS2或者Cygwin中的程序。
|[[Win32Redirector]]
|
|
* Windows
* Windows
* Linux (ubuntu 20.04)
|-
|HEnvBox
|快速搭建本人常用的开发环境。
|[[HEnvBox]]
|
* Windows 10及更新版
* Ubuntu 22.04
* Debian
* Deepin
|}
 
== 常用库 ==
此章节主要对使用的比较多的库做一个整理。
{| class="wikitable"
|+
!名称
!官网
!说明
!Wiki
|-
|wxWidgets
|https://www.wxwidgets.org/
|跨平台GUI库
|[[wxWidgets]]
|-
|Qt
|https://www.qt.io/
|跨平台库(包括GUI)
|[[Qt]]
|}
 
=== 工具/库(自写/修改) ===
{| class="wikitable"
|+
!名称
!说明
!Wiki(若有)
|-
|DeployWin
|MSYS2与CygWin下编程辅助打包库。一般配合CMake的CPack使用。
|[[DeployWin]]
|-
|HCppBox
|本人常用的C/C++代码
|[[HCppBox]]
|-
|SimpleModbusRTUPacket
|简易的[[Modbus]] RTU包解析
|[[SimpleModbusRTUPacket]]
|}
 
==常用镜像站==
在找各种源码资源时,经常遇到国外网站下载较慢的情况下,此时通常需要更换镜像站。
 
例如:
 
*ubuntu系统的软件包(包括使用deboostrap的镜像源)
*python软件包
*gnu软件源码包
*linux源码
 
{| class="wikitable"
|+
!地址
!说明
|-
|http://mirrors.ustc.edu.cn/
|中国科学技术大学镜像站
|-
|https://mirrors.tuna.tsinghua.edu.cn/
|清华大学镜像站
|-
|http://mirrors.163.com/
|网易开源镜像站
|-
|http://mirrors.aliyun.com/
|阿里开源镜像站
|-
|https://mirrors.cernet.edu.cn
|校园网联合镜像站
|}
 
== 静态文档网站 ==
一些静态的网页文档,如[https://www.doxygen.nl/ doxygen]生成的帮助文档与[https://docsify.js.org/#/ docsify]制作的静态说明文档。
{| class="wikitable"
|+
!类型
!URL
!备注
|-
|静态文档仓库
|https://heyahong.github.io/#/
|采用github pages托管,源代码仓库:https://github.com/HEYAHONG/HEYAHONG.github.io.git
|-
|网站
|http://docs.hyhsystem.cn
|采用nginx服务器,运行于云服务器
|}
|}


第135行: 第680行:


*[[测试资源]]
*[[测试资源]]
*[[第三方资源]]
*[[方案发现与探索]]
*[[方案发现与探索]]
*[[杂项笔记与测试代码]]
*[[杂项笔记与测试代码]]
*[[常见问题]]

2024年4月3日 (三) 08:53的最新版本

常用项目

嵌入式项目

名称 简介 Wiki(若有) 标签
ExtBoard-001 扩展板,用于扩展一个可编程通道(RS485)。

主要采用以下芯片:

  • CH334R:USB Hub。
  • Air32F103CCT6:DAPLink主控芯片、Core主控芯片。
  • MAX3485:3.3V电源驱动的RS485收发芯片。
ExtBoard-001

常用技术栈

可连接TCP/IP的物联网设备

开发物联网设备时,无论设备是通过WiFi、2G/3G/4G/5G或以太网连接网络,如设备支持TCP/IP,通常采用MQTT作为主要通信协议。

除了主要通信协议,通常物联网设备还需要支持NTP对时,有时还需要使用到Http作为辅助协议。

主要使用的协议如下:

协议名称 说明 备注
MQTT MQTT是专门针对物联网开发的轻量级传输协议。 通常采用TCP,可实现实时控制。
LwM2M LwM2M是一种轻量级的、标准通用的物联网设备管理协议,可用于快速部署客户端/服务器模式的物联网业务 通常采用UDP,常见于NB-IOT模块。

由于UDP的在公网上的老化(公网的NAT转换机制),在公网上不能实现实时控制,只能应用于周期上报的设备。

在专网或者局域网内可实现实时控制。

CoAP CoAP是一种用于受限节点与受限网络的web传输协议,由IETF提出。 通常采用UDP,可使用DTLS加密,一般情况下用于在受限环境中替代http。
Http/Https 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议。 通常用于调用后端服务器的api接口。
NTP NTP是用来使计算机时间同步化的一种协议。

低成本方案

低成本方案主要是指硬件采用SOC方案并且操作系统采用嵌入式操作系统的方案或者外设方案:

  • Air724UG :4G模块,可使用C/C++进行二次开发。
  • Air780E:4G模块,EC618平台,可使用C/C++进行二次开发,较Air724UG廉价。
  • ESP8266 : WIFI模块。
  • ESP32 : WIFI模块,可接以太网PHY实现以太网上网。
  • W600 : WIFI模块。
  • W800 : WIFI模块。
  • CH579 : 自带以太网PHY,可实现以太网上网。
  • W5500 :全硬件以太网外设芯片,需配合主控使用。

一般方案

一般方案主要指资源相对充足的方案,一般采用Linux作为内核:

  • MT7688 :可采用以太网或者WIFI联网,通过USB可接4G上网模块通过RNDIS上网。

带交流计量功能的设备

单相SOC方案

对于单相计量(即常见的家用电)设备,通常采用SOC方案:

此类SOC通常可以使用内置的模块完成包括计量功能在内的大部分需求,在某些情况下也可开发高精度的直流计量设备。
如需与其它设备进行交互,通常还需要添加通信模块或者使用串口通信。
若使用串口通信,本人常用Modbus RTU作为具体协议,将具体的硬件资源映射为线圈(可读写的位)、输入线圈(只读的位)、保持寄存器(可读写)、输入寄存器(只读)。

单相非SOC方案

若由于需要采用低成本导致计量部分相对于强电非隔离,而设备上又需要输出隔离接口时,通常采用非SOC方案+串口/SPI口隔离,常用芯片方案:

此方案需要另外加一个主控芯片。

三相非SOC方案

若待计量的电路为三相电路,常用芯片方案:

此方案需要另外加一个主控芯片。
注意:截至编辑时,尚未发现三相SOC方案。

带有特殊功能的路由器/WIFI网关

芯片方案:

软件开发方案:

在内核设备树(dts)配置中使能需要使用的标准接口,并在openwrt的menuconfig中选中对应的kmod包后,即可使用Linux用户程序(非内核模块)操作硬件设备。
对于SPI、I2C与UART而言,用户可通过打开/dev目录下的相应字符设备即可使用。
对于GPIO而言,可使用sysfs文件系统目录:/sys/class/gpio目录进行GPIO操作。

基于USB的外设扩展

对于使用Linux内核的设备的外设扩展,本人较为推崇使用USB作为外设总线,其优点如下:

  • 支持热插拔与子设备枚举,无需在设备树中配置所挂接的子设备。
  • 可使用hub扩展较多接口。
  • 支持USB的转换芯片较多。

一般来讲,对于少量控制数据的传输,USB 2.0的传输速度就足够了。

USB HUB

芯片系列 说明 官网(若有)
CH334/CH335 4 口USB 2.0 USB Hub https://www.wch.cn/products/CH334.html
CH338 7口USB 2.0 USB Hub https://www.wch.cn/products/CH338.html
FE1.1s 4 口USB 2.0 USB Hub
HS8836A 4 口USB 2.0 USB Hub

USB 转换芯片

芯片系列 说明 官网(若有)
CH340 USB转串口/打印口 https://www.wch.cn/products/CH340.html

USB 上位机软件开发

  • 对于标准外设,可按照标准外设的使用方法,如USB转串口按照串口的方式使用。
  • 对于USB原生的应用(直接通过端点发送接收数据),可使用libusb开发。
  • 对于基于USB的HID设备,若未被其它内核驱动使用,可使用hidapi开发。

USB 嵌入式开发

若未具体说明,本章节中的USB嵌入式开发指Device端的嵌入式开发,即USB外设开发。

除了各个芯片厂商提供的USB栈,还可使用以下USB栈用于USB外设开发:

USB库 说明 官网(若有)
tinyusb 开源、跨平台的USB HOST/DEVICE栈 https://www.tinyusb.org/
CherryUSB 小而美的、可移植性高的、用于嵌入式系统的 USB 主从协议栈 https://cherryusb.readthedocs.io/

外壳方案

可采用导轨安装的外壳方案

对于电气控制柜、仪表柜、配电箱等,安装导轨是一个极其常见的配件。

常用的安装导轨方案如下:

  • DIN TS35:35×7.5 安装导轨,宽度35mm,深度7.5mm,材质形式为钢、铝、铜等,表现形式为横条状金属片

若未特殊说明,导轨均指DIN TS35安装导轨。

对于带计量的产品而言,除了设计成插座样式,还可以设计成导轨安装并安放在配电箱里。

对于需要安装至导轨的产品而言,主要有以下方案:

  • 直接使用可用于导轨安装的外壳。
  • 采用导轨安装卡扣,卡扣上通常有螺丝孔位,可通过螺丝安装产品。

廉价铝壳外壳方案

作为物联网产品(尤其是具有RTU/DTU角色的物联网产品),通常需要一个外壳。一般情况下,可使用铁壳或者铝壳作为外壳。

为减小成本,本人一般采用成品铝壳作为外壳。

注意:本段落中的铝壳主要指主要外形为长方体,两侧或者顶部具有可拆卸的盖子的壳体,并不泛指所有采用铝作为主要材料的壳体。

一般情况下,通常需要给铝壳开孔以引出接口,常用方案如下:

  • 正面开孔,一般通过厂家定制。仅试样的情况下,价格一般相对较高。
  • 侧盖开孔(一面或两面),一般通过厂家定制。仅试样的情况下,价格一般相对较高。
  • 采用PCB作为侧盖(一般使用黑色的壳体配合黑色PCB),使用PCB制造开孔。仅试样的情况下,价格相对便宜。
  • 一侧不要侧盖。适用于直接引出导线的产品,一般配合灌胶工艺。一般直接用于量产产品。

如需使用导轨安装,可使用导轨安装卡扣固定铝壳。

常用尺寸1
铝壳参数
PCB块数 PCB最大厚度 PCB最大宽度 PCB最大长度
100mm 66mm 27mm 2(一块顶部PCB板,一块底部PCB板) 2mm 60.3mm(不能小太多) 100mm(取决于铝壳长度,一般可定制)

常用芯片及模块

常用芯片及核心模块

常用芯片及核心模块
芯片/模块名称 说明 wiki(若有)
RN8211B 单相计量SOC RN8211B
HT502X 单相计量SOC HT502X
Air724UG 4G模块,进行C语言开发 Air724UG
Air780E 4G模块,EC618平台,可使用C/C++进行二次开发,较Air724UG廉价 Air780E
ESP-12F WIFI透传模块,可支持二次开发,主芯片为ESP8266 ESP8266
ESP-32S ESP32模块,可支持WIFI、蓝牙、以太网,可采用esp-idf开发 ESP32
TB-01 W600开发板,WIFI SOC,Cortex-M3内核 W600
TB-08 W800开发板,WIFI/蓝牙 SOC, XT804内核 W800
CH579 以太网、蓝牙、USB SOC,Cortex-M0内核MCU CH579
HLK-7688A MT7688芯片核心模块,可采用openwrt开发 MT7688
E18-MS1 CC2530芯片核心模块,可采用contiki开发或者Z-Stack开发 CC2530
Air105 廉价大内存mcu,4M flash,640K SRAM,Cortex-M4F Air105
Lichee Zero 全志V3s开发板,64M DRAM,廉价Linux开发板,V3s芯片可手贴 V3s Lichee Zero


注意:此章节可能不包含资料较多,应用极其成熟的芯片系列。

外设芯片及外设模块

外设芯片及外设模块
名称 说明 接口 wiki(若有)
RN8302B 三相计量芯片 SPI RN8302B
RN8209C/RN8209D 单相计量芯片
  • UART
  • SPI
RN8209
NRF24L01+ 2.4G无线芯片,具有众多兼容替代(如Si24R1) SPI+GPIO(中断、CE) NRF24L01+
W5500 全硬件栈以太网芯片 SPI W5500
中景园0.96寸OLED点阵屏 分辨率128x64,显示驱动(控制)芯片SSD1306
  • IIC
  • SPI+GPIO(DC、RES)
SSD1306 中景园0.96寸OLED点阵屏
AHT20 温湿度传感器 IIC AHT20
DS1307 RTC(实时时钟) IIC DS1307

常用嵌入式操作系统、BootLoader、嵌入式固件及嵌入式软件库

名称 说明 wiki(若有)
FreeRTOS 嵌入式操作系统 FreeRTOS
rt-thread 物联网嵌入式操作系统 rt-thread
nuttx 嵌入式操作系统 nuttx
paho.mqtt.embedded-c MQTT客户端,可移植到各种芯片平台 paho.mqtt.embedded-c
openwrt 操作系统,嵌入式Linux构建工具 openwrt
u8g2 单色/点阵屏驱动库 u8g2
U-Boot 通用引导加载器。通常用于加载Linux U-Boot
Newlib 嵌入式C运行库(通常配合GCC使用) Newlib
printf printf, sprintf and (v)snprintf 实现 printf


常用工具

常用工具
名称 说明 wiki(若有)/链接地址
easy-rsa 使用SSL/TLS时,自签证书制作/管理工具 easy-rsa
buildroot 嵌入式Linux构建工具 buildroot
debootstrap Linux系统根文件系统创建工具,可创建Debian系Linux系统根文件系统 debootstrap
crosstool-ng 交叉编译工具链创建工具 crosstool-ng
ScreenToGif 在Windows下录屏制作gif的工具 https://github.com/NickeManarin/ScreenToGif.git
Xfel 全志SOC的FEL工具(可下载固件等) Xfel
busybox unix工具箱,可用于创建体积极小的rootfs busybox

IDE环境/开发环境/开发工具

名称 说明 wiki(若有)/链接地址
codeblocks 免费的C/C++ IDE,可开发多种C/C++程序。本人只要将它用作基于CMake构建的工程的代码编写。 http://www.codeblocks.org/
Microsoft Visual Studio 微软的开发工具集。本人主要用于开发WIN32程序。本人优先使用codeblocks作为C/C++开发环境,VS占用的空间太大,但有些第三方库在Windows上可能只支持MSVC,故而必须使用VS。 https://visualstudio.microsoft.com/zh-hans/
keil5 用于ARM嵌入式芯片的开发。注意:keil5不是免费的。 https://www.keil.com/
IAR 本人主要使用针对ARM嵌入式芯片的开发。注意:IAR不是免费的。 https://www.iar.com/
QtCreator 用于创建基于Qt的程序。 https://www.qt.io/product/development-tools
MounRiver 基于Eclipse的嵌入式ARM/RISC-V的集成开发环境。本人主要用于测试WCH的单片机。 http://www.mounriver.com/
RT-Thread Studio 一站式的 RT-Thread 开发工具,通过简单易用的图形化配置系统以及丰富的软件包和组件资源,让物联网开发变得简单和高效。本人主要用于开发与rt-thread相关设备。 https://www.rt-thread.org/

电子硬件设计(原理图绘制/PCB绘制/其它相关工具)

名称 说明 wiki(若有)/链接地址
立创EDA 高效的国产PCB设计工具,永久免费。可在线使用。 https://lceda.cn/
KiCad 跨平台开源电子设计套装。 https://www.kicad.org/
freerouting 自动布线工具。可配合立创EDA或KiCad使用。本人用于替代立创EDA自带的自动布线。 https://www.freerouting.app/

https://github.com/freerouting/freerouting.git

编译器

名称 说明 wiki(若有)/链接地址
sdcc 用于8位/16位单片机(如MCS51、DS80C390 、HC08、Z80、STM8, MOS 6502 、WDC 65C02等)的C编译器 https://sdcc.sourceforge.net/

流程图/框图绘制

名称 说明 wiki(若有)/链接地址
dia 跨平台开源流程图绘制工具 http://dia-installer.de/

https://sourceforge.net/projects/dia/

图像处理

名称 说明 wiki(若有)/链接地址
GIMP 免费开源图像编辑器 https://www.gimp.org/

国际化/本地化

名称 说明 wiki(若有)/链接地址
Poedit .po编辑工具。可编辑使用 xgettext 生成的翻译文件 https://poedit.net/

压缩/解压缩

名称 说明 wiki(若有)/链接地址
7-zip 开源免费的压缩/解压缩软件。Windows下有GUI程序,Linux下只有控制台版本。 http://www.7-zip.org

虚拟磁盘/磁盘驱动

名称 说明 wiki(若有)/链接地址
imdisk Windows下开源虚拟磁盘工具,可方便挂载内存盘(存放临时文件)。 https://sourceforge.net/projects/imdisk-toolkit
Ext2fsd Windows下访问Ext2/Ext3/Ext4文件系统驱动。 https://sourceforge.net/projects/ext2fsd/

安装/卸载

名称 说明 wiki(若有)/链接地址
Geek Uninstaller Windows下程序卸载工具,具有免费的版本。 https://geekuninstaller.com/

小工具(自写/修改/组合)

名称 说明 wiki 支持平台
CC3200_GangGenerator 生成用于烧录CC3200 SPI Flash的工具 CC3200_GangGenerator
  • Windows
WMToolHelper W600烧录工具 WMToolHelper
  • Windows
  • Linux (ubuntu 20.04)
WinBleTool Windows下调试BLE的工具 WinBleTool
  • Windows 10(及以上)
SimpleBLETool 调试BLE的工具 SimpleBLETool
  • Windows 10+
  • Linux(ubuntu 20.04+)
cutecom-ng 基于Qt5的串口工具。个人修改版。 cutecom-ng 只要是Qt5支持的桌面平台均支持。
OneNETTool 开发OneNET辅助工具 OneNETTool
  • Windows
  • Linux (ubuntu 20.04)
QGDW12184Tool 开发Q/GDW 12184辅助工具 QGDW12184Tool
  • Windows
  • Linux (ubuntu 20.04)
XServerForWSL1 利用cygwin中的X服务对WSL提供X服务 XServerForWSL1 支持WSL1的Windows
linux_binfmt_pe 使用wine直接执行PE可执行文件的Linux内核模块 linux_binfmt_pe
  • Linux内核
Win32Redirector 重定向win32控制台应用至MSYS2或者Cygwin中的程序。 Win32Redirector
  • Windows
HEnvBox 快速搭建本人常用的开发环境。 HEnvBox
  • Windows 10及更新版
  • Ubuntu 22.04
  • Debian
  • Deepin

常用库

此章节主要对使用的比较多的库做一个整理。

名称 官网 说明 Wiki
wxWidgets https://www.wxwidgets.org/ 跨平台GUI库 wxWidgets
Qt https://www.qt.io/ 跨平台库(包括GUI) Qt

工具/库(自写/修改)

名称 说明 Wiki(若有)
DeployWin MSYS2与CygWin下编程辅助打包库。一般配合CMake的CPack使用。 DeployWin
HCppBox 本人常用的C/C++代码 HCppBox
SimpleModbusRTUPacket 简易的Modbus RTU包解析 SimpleModbusRTUPacket

常用镜像站

在找各种源码资源时,经常遇到国外网站下载较慢的情况下,此时通常需要更换镜像站。

例如:

  • ubuntu系统的软件包(包括使用deboostrap的镜像源)
  • python软件包
  • gnu软件源码包
  • linux源码
地址 说明
http://mirrors.ustc.edu.cn/ 中国科学技术大学镜像站
https://mirrors.tuna.tsinghua.edu.cn/ 清华大学镜像站
http://mirrors.163.com/ 网易开源镜像站
http://mirrors.aliyun.com/ 阿里开源镜像站
https://mirrors.cernet.edu.cn 校园网联合镜像站

静态文档网站

一些静态的网页文档,如doxygen生成的帮助文档与docsify制作的静态说明文档。

类型 URL 备注
静态文档仓库 https://heyahong.github.io/#/ 采用github pages托管,源代码仓库:https://github.com/HEYAHONG/HEYAHONG.github.io.git
网站 http://docs.hyhsystem.cn 采用nginx服务器,运行于云服务器

相关链接