0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHAB和Zwave的入门指南

454398 来源:网络整理 作者:网络整理 2020-01-29 17:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:Raspbian设置

*** **** raspbian初始设置*******(假设所有用户均为pi

将语言设置为美国英语

扩展文件系统

(可选)高级-》重命名主机

sudo apt-get update

sudo apt-get upgrade

******* raspbian可选NTP更新*******

sudo apt-get install ntp

cd 。.

sudo nano etc/ntp.conf

使用以下命令更新ntp.conf文件。

# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will

# pick a different set every time it starts up. Please consider joining the

# pool:

# server 0.debian.pool.ntp.org iburst

# server 1.debian.pool.ntp.org iburst

# server 2.debian.pool.ntp.org iburst

# server 3.debian.pool.ntp.org iburst

server 0.us.pool.ntp.org

server 1.us.pool.ntp.org

server 2.us.pool.ntp.org

server 3.us.pool.ntp.org

******* raspbian可选,重命名主机*********

sudo nano /etc/hosts

使用更改来更新文件

127.0.1.1 YOURPINAME

是raspberrypi(默认)

sudo nano /etc/hostname

使用更改来更新文件

YOURPINAME

sudo /etc/init.d/hostname.sh

******* raspbian可选静态地址*********

(我发现这是需要准确性的,不太可靠。建议您通过家庭路由器为Pi分配一个静态地址。)

sudo nano /etc/network/interfaces

使用所做的更改更新文件

auto lo

iface lo inet loopback

auto eth0

allow-hotplug eth0

iface eth0 inet dhcp

auto wlan0

allow-hotplug wlan0

iface wlan0 inet dhcp

#address XXX.XXX.XXX.XXX

#netmask XXX.XXX.XXX.XXX

#gateway XXX.XXX.XXX.XXX

#network XXX.XXX.XXX.XXX

#broadcast XXX.XXX.XXX.XXX

wpa-ssid YOURSSID

wpa-psk YOURSSIDPASSWORD sudo service networking restart

******* raspbian可选wifi访问*********

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

使用chang更新文件es

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1 network={

ssid=“YOURSSID”

psk=“YOURSSIDPASSWORD”

proto=RSN

key_mgmt=WPA-PSK

pairwise=TKIP

auth_alg=OPEN

} sudo reboot

步骤2:OpenHAB设置

******* openHAB安装*******

有关这些步骤的详细信息,请点击此处。

sudo mkdir /opt/openhab cd /opt/openhab

sudo wget https://bintray.com/artifact/download/openhab/bin.。.》》

(检查当前版本)

sudo unzip distribution-1.7.1-runtime.zip sudo rm distribution-1.7.1-runtime.zip

cd addons/

sudo wget https://bintray.com/artifact/download/openhab/bin.。.

sudo unzip distribution-1.7.1-addons.zip

(这些是我指的附件。以后可以删除未使用的附件)

sudo rm distribution-1.7.1-addons.zip cd 。. sudo cp configurations/openhab_default.cfg configurations/openhab.cfg

让我们根据这篇文章将openHAB设置为自动运行。此代码中的默认用户为“ Ben”。但是,我从未设置过用户,并且在我们的安装中也没关系。

cd /opt/openhab sudo nano /etc/init.d/openhab

(通过粘贴到文件中添加此代码。)

#! /bin/sh

### BEGIN INIT INFO

# Provides: openhab

# Required-Start: $remote_fs $syslog

# Required-Stop: $remote_fs $syslog

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: OpenHAB Daemon

### END INIT INFO

# Author: Thomas Brettinger

# Do NOT “set -e”

# PATH should only include /usr/* if it runs after the mountnfs.sh script

PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC=“Open Home Automation Bus Daemon”

NAME=openhab

DAEMON=/usr/bin/java

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

ECLIPSEHOME=“/opt/openhab”;

HTTPPORT=8080

HTTPSPORT=8443

TELNETPORT=5555

#RUN_AS=ben

# get path to equinox jar inside $eclipsehome folder

cp=$(find $ECLIPSEHOME/server -name “org.eclipse.equinox.launcher_*.jar” | sort | tail -1);

DAEMON_ARGS=“-Dosgi.clean=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djetty.port=$HTTPPORT -Djetty.port.ssl=$HTTPSPORT -Djetty.home=$ECLIPSEHOME -Dlogback.configurationFile=$ECLIPSEHOME/configurations/logback.xml -Dfelix.fileinstall.dir=$ECLIPSEHOME/addons -Djava.library.path=$ECLIPSEHOME/lib -Djava.security.auth.login.config=$ECLIPSEHOME/etc/login.conf -Dorg.quartz.properties=$ECLIPSEHOME/etc/quartz.properties -Djava.awt.headless=true -jar $cp -console ${TELNETPORT}”

# Exit if the package is not installed

[ -x “$DAEMON” ] || exit 0

# Read configuration variable file if it is present

[ -r /etc/default/$NAME ] && 。 /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables

。 /lib/init/vars.sh

# Define LSB log_* functions.

# Depend on lsb-base (》= 3.2-14) to ensure that this file is present

# and status_of_proc is working.

。 /lib/lsb/init-functions

#

# Function that starts the daemon/service

#

do_start()

{

# Return

# 0 if daemon has been started

# 1 if daemon was already running

# 2 if daemon could not be started

start-stop-daemon --start --quiet --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --chdir $ECLIPSEHOME --exec $DAEMON --test 》 /dev/null \

|| return 1

start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --chdir $ECLIPSEHOME --exec $DAEMON -- $DAEMON_ARGS \

|| return 2

# Add code here, if necessary, that waits for the process to be ready

# to handle requests from services started subsequently which depend

# on this one. As a last resort, sleep for some time.

return 0

}

#

# Function that stops the daemon/service

#

do_stop()

{

# Return

# 0 if daemon has been stopped

# 1 if daemon was already stopped

# 2 if daemon could not be stopped

# other if a failure occurred

start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME

RETVAL=“$?”

[ “$RETVAL” = 2 ] && return 2

# Wait for children to finish too if this is a daemon that forks

# and if the daemon is only ever run from this initscript.

# If the above conditions are not satisfied then add some other code

# that waits for the process to drop all resources that could be

# needed by services started subsequently. A last resort is to

# sleep for some time.

start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON

[ “$?” = 2 ] && return 2

# Many daemons don‘t delete their pidfiles when they exit.

rm -f $PIDFILE

return “$RETVAL”

}

#

# Function that sends a SIGHUP to the daemon/service

#

do_reload() {

#

# If the daemon can reload its configuration without

# restarting (for example, when it is sent a SIGHUP),

# then implement that here.

#

do_stop

sleep 1

do_start

return 0

}

case “$1” in

start)

log_daemon_msg “Starting $DESC”

do_start

case “$?” in

0|1) log_end_msg 0 ;;

2) log_end_msg 1 ;;

esac

;;

stop)

log_daemon_msg “Stopping $DESC”

do_stop

case “$?” in

0|1) log_end_msg 0 ;;

2) log_end_msg 1 ;;

esac

;;

status)

status_of_proc “$DAEMON” “$NAME” && exit 0 || exit $?

;;

#reload|force-reload)

#

# If do_reload() is not implemented then leave this commented out

# and leave ’force-reload‘ as an alias for ’restart‘。

#

#log_daemon_msg “Reloading $DESC” “$NAME”

#do_reload

#log_end_msg $?

#;;

restart|force-reload)

#

# If the “reload” option is implemented then remove the

# ’force-reload‘ alias

#

log_daemon_msg “Restarting $DESC”

do_stop

case “$?” in

0|1)

do_start

case “$?” in

0) log_end_msg 0 ;;

1) log_end_msg 1 ;; # Old process is still running

*) log_end_msg 1 ;; # Failed to start

esac

;;

*)

# Failed to stop

log_end_msg 1

;;

esac

;;

*)

#echo “Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}” 》&2

echo “Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}” 》&2

exit 3

;;

esac

sudo chmod a+x /etc/init.d/openhab sudo update-rc.d openhab defaults sudo nano etc/rc.local

(通过粘贴到文件中添加此代码。某些行可能已经存在,因此请粘贴缺少的内容)

# By default this script does nothing.

# By default this script does nothing.

sudo /opt/openhab/start.sh

fbset -xres 16 -yres 16 -vres 16 -depth 8

/opt/vc/bin/tvservice -o

# Print the IP address

_IP=$(hostname -I) || true

if [ “$_IP” ]; then

printf “My IP address is %s ” “$_IP”

fi

exit 0

******* openHAB可选演示安装开始*******

sudo wget https://github.com/openhab/openhab/releases/download/v1.6.2/distribution-1.6.2-demo-configuration.zip

cd /opt/openhab sudo unzip distribution-1.6.2-demo-configuration.zip sudo rm distribution-1.6.2-demo-configuration.zip sudo chmod +x start.sh sudo 。/start.sh

去检查一下。

http://192.168.X.XXX:8080/openhab.app?sitemap = demo 。..(使用您的Pi的IP地址)

步骤3:绑定和您的第一个开关

OpenHAB和Zwave的入门指南

******* openHAB可选Samba安装**** ***

(用于轻松访问配置文件。CATION-您具有删除/修改的root权限)

sudo apt-get install samba samba-common-bin sudo nano /etc/samba/smb.conf # Change this to the worgroup/NT-domain name your Samba server will part of

workgroup = YOURWORKGROUP

# WINS Support - Tells the NMBD component of Samba to enable its WINS Server

wins support = yes

#add to the last line

[OpenHAB]

comment = OpenHAB

path = /opt/openhab

browseable = Yes

writeable = Yes

only guest = no

create mask = 0777

directory mask = 0777

public = no

force user = root sudo smbpasswd -a pi

(将密码设置为所需的任意值)

您现在应该可以从PC(通过LAN)访问openHAB目录。

******* openHAB设计器*********

下载并按照安装说明进行操作。

https://bintray.com/artifact/download/openhab/bin/。..

通过samba通过网络文件夹访问openHAB配置文件夹。

[查看图像]

******* openHAB zwave绑定*********

转到此处获取有关zwave网络的更多信息http://www.vesternet.com/resources/technology-ind 。..

sudo nano /opt/openhab/configurations/openhab.cfg

查找标题为 Z-Wave Binding”的部分。

您只需激活2个属性(通过删除前面的#)即可。

zwave:port 是Z-Wave控制器端口。如果您有raZberry,则为/dev/ttyAMA0 。 USB记忆棒将为/dev/ttyUSB0 。

zwave:healtime 是每天进行网络修复的时间。您可能可以将其保留为2(2AM)。

cd /opt/openhab sudo wget sudo unzip habmin.zip sudo rm habmin.zip

将您的z波设备添加到网络中,然后根据需要进行关联。

http://192.168.2.100:8080/habmin/(您的IP)

[查看图片]

示例项目

调光器test_dimmer2“调光器2 [%d %%]”(zwave){zwave =“ 11”}

联系Door_Switch“门传感器[%s]”(zwave){zwave =“ 10: command = switch_binary,respond_to_basic = true“}联系Door_Alarm”门防拆[%s]“(zwave){zwave =” 10:command = alarm“}

Number Door_Battery”门电池[%d %%]“”(zwave ){zwave =“ 10:command = battery”}

******* openHAB设置您的第一个站点*********

转到打开openHAB Wiki并阅读。

摘要:

项-是家庭自动化网络中每个节点的列表。向网络添加内容时,从此处开始。

持久性-允许您记录输入。规则-通常是一个(如果是-然后是那个)真正使您回家自动化的规则。

脚本-我不使用这些

站点地图-这是您通过web访问openHAB的主页。您可以有多个。

Transform-允许您将每个节点提供的文本更改为您的首选项。

让我们设置zwave调光器(下面引用的文件附在这篇文章中)

确认在openhab.cfg文件中启用了zwave绑定。我们之前做了这个。

确认已安装zwave附加组件。我们做了耳环。

\\ YOURPI \ OpenHAB \ addons \ org.openhab.binding.zwave-1.7.1

将新节点与zstick关联。说明在这里。

从openHAB管理界面(habmin)获取节点信息。这是较早安装的。

http://XXX.XXX.XXX.XXX:8080/habmin/(在您的pi上)

您可能需要基于以下内容分配“关联组”和“配置参数”在您的节点上。调光器通常不需要这样做。

获取节点号。在我的情况下11个

[请参见图片]

对项目列表中的节点进行编码

\ OpenHAB \ configurations \ items \ HAB.items(我正在命名此HAB。随着我们的前进,您会看到。)

将以下行添加到openhab

Dimmer light_living_dimmer “Living Rm Dimmer [%d %%]” (all,zwave,lights) { zwave= “11” }

Dimmer-是节点类型

light_living_dimmer-是节点的名称。我按类型命名所有项-位置-特异性

“ Living Rm Dimmer [%d %%]”-是出现在GUI(浏览器或应用程序)中的名称和值

滑块-是图标。在这种情况下,幻灯片可让您通过GUI

(所有,zwave,灯光)调整亮度-这些是组。它们有助于在站点地图上显示多个项目(通过组)。它们还有助于一次将规则应用于多个项目。

这些组也必须在Dimmer行下的openhab HAB.items中列出

Group all

Group zwave

Group lights

{zwave =“ 11”}-告诉openHAB它与zwave节点11接口

将该项目添加到您的站点地图中

\ OpenHAB \ configurations \ sitemaps \ HAB.sitemap

将以下几行添加到站点地图中

sitemap HAB label=“My openHAB”

{ Frame label= “Switches” icon= “light_switch” { Group item= lights label=“Lights” icon=“light_switch”

}

}

在这种情况下,“灯光”组中的所有项目都将显示在这个框架中。您也可以单独添加项目。

让我们设置一个基于简单cron(时间)的规则

\ OpenHAB \ configurations \ rules \ HAB.rules

我使用http://www.cronmaker。 com/来延长计划时间

继续并添加一些库和规则。

import org.openhab.core.library.types.*

import org.openhab.core.persistence.*

import org.openhab.model.script.actions.*

import java.lang.Math

import org.openhab.core.library.types.DecimalType rule “Trigger Turn Light up to 75% at 1900”

when

Time cron “0 0 19 1/1 * ? *”

then

sendCommand(light_living_dimmer , 75)

}

end rule “Trigger Turn Light off at 2200”

when

Time cron “0 0 22 1/1 * ? *”

then

sendCommand(light_living_dimmer , 0)

}

end

仅此而已。玩得开心!

步骤4:Raspbian可选USB音频

我无法使用openHAB通过USB运行音频。如果可行,请在评论中发布解决方案。

Syba USB 2.0外部虚拟7.1环绕声卡适配器

我可以让Pi与USB音频配合使用。对于openHAB来说,这将是无效的。可能是Java问题?

弄清楚您的芯片组

首先要使Raspi 关闭/关闭(执行干净操作)。关闭!),然后插入USB声卡。

登录后,键入 dmesg |。 grep cm109 查看启动消息。如果您使用的是 CM109 芯片组

图像1

,则应该看到关于 cm109 的几行,或者如果什么都没有出现,尝试 dmesg | grep 耳机,您将看到 C-Media USB耳机设置驱动程序。这表示其为 CM耳机

图片2

,或者如果未显示任何内容,请尝试 dmesg | grep C-Media ,您会看到一些C-Media注释,但没有提及cm109驱动程序。这表示其 CM108

图像3

CM耳机类型

类型 dmesg 查看启动消息。您应该会看到许多关于 C媒体USB耳机套件

图片4

的信息,如果您键入 lsusb ,您应该会看到对 C-Media Electronics音频适配器的引用,但没有提及 CM108 ,并且VID/PID为0x0d8c:0x00c

Image 5

没什么特别的事情要做!欢呼!继续进入“更新ALSA配置”部分

更新alsa选项

先备份

sudo cp /etc/modprobe.d/alsa-base.conf /etc/modprobe.d/alsa-base-1.conf

我们将进行编辑带有

sudo nano /etc/modprobe.d/alsa-base.conf

的音频系统配置文件,但除了最新的Raspbian版本外,请查找以下内容:

#options snd-usb-audio index=0

将其更改为:

options snd-usb-audio index=0

注意,我们在行的开头删除了#。

对于最新的Raspbian版本,请查找以下行:

options snd-usb-audio index=-2

在这种情况下没有要删除的#号,只需将索引从-2更改为0:

options snd-usb-audio index=0

图像6

就是这样!现在,使用 sudo reboot 重新启动并再次登录,您可以通过runnig使用扬声器测试进行测试

speaker-test -c2 -D hw:0,0

这会产生白噪声通过声卡上的左右“扬声器”。发出声音后,请尝试播放带有音频的音频文件(对于WAV文件,不是MP3)

aplay /usr/share/scratch/Media/Sounds/Animal/Bird.wav aplay /usr/share/sounds/alsa/Front_Center.wav

如果要播放音乐,您可以尝试

sudo apt-get install mpg123 mpg123 http://voxsc1.somafm.com:8882

如果您想按命令播放MP3,请查看本教程,其中涵盖了如何进行设置

耳机vs音频卡

别忘了,您在Pi上仍然拥有内置的耳机插孔,现在称为卡1 (不是默认的卡0 )

图片7

如果您想再次通过该插孔玩游戏,请用-指定卡1 D hw:1,0 代替 -D hw:0,0

speaker-test -c2 -D hw:1,0

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Zwave
    +关注

    关注

    0

    文章

    8

    浏览量

    12423
  • raspbian
    +关注

    关注

    0

    文章

    17

    浏览量

    4477
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TPS65233EVM评估模块使用指南:从入门到精通

    TPS65233EVM评估模块使用指南:从入门到精通 在电子工程师的日常工作中,评估模块的使用是进行产品开发和测试的重要环节。今天,我们就来深入了解一下德州仪器(Texas Instruments
    的头像 发表于 04-25 16:55 1037次阅读

    Renesas RL78/G14 入门指南

    Renesas RL78/G14 入门指南 一、前言 在电子设计领域,Renesas Starter Kit for RL78/G14 是一款备受关注的开发套件。它为电子工程师提供了一个便捷的平台
    的头像 发表于 04-13 14:30 123次阅读

    瑞萨RL78/G14入门套件快速上手指南

    瑞萨RL78/G14入门套件快速上手指南 引言 对于电子工程师而言,瑞萨RL78/G14入门套件是一个功能强大的开发工具。本文将详细介绍该套件的快速启动流程,帮助大家尽快上手。 文件下载
    的头像 发表于 04-13 14:30 98次阅读

    Microchip MCP1602评估板使用指南:从入门到实践

    Microchip MCP1602评估板使用指南:从入门到实践 在电子设计领域,一款优秀的评估板能够为工程师提供便捷的测试和开发环境。Microchip的MCP1602评估板就是这样一款值得关注
    的头像 发表于 04-07 12:05 194次阅读

    LT3686降压调节器快速入门指南

    LT3686降压调节器快速入门指南 一、引言 在电子设计领域,降压调节器是一种常见且重要的电路元件,广泛应用于各种电子设备中。今天我们要介绍的 LT3686 是一款性能出色的降压调节器,本文将
    的头像 发表于 03-31 14:05 182次阅读

    探索 RENESAS RL78/G1G 组瑞萨入门套件:功能、配置与开发指南

    探索 RENESAS RL78/G1G 组瑞萨入门套件:功能、配置与开发指南 在电子设计领域,拥有一款功能强大且易于上手的开发套件对于工程师来说至关重要。瑞萨电子的 RL78/G1G 组瑞萨入门套件
    的头像 发表于 12-29 17:05 1125次阅读

    Renesas RSKRX231开发板:从入门到实战的全方位指南

    Renesas RSKRX231开发板:从入门到实战的全方位指南 在当今的电子设计领域,一款功能强大且易于上手的开发板对于工程师们来说至关重要。Renesas RSKRX231开发板就是这样一款备受
    的头像 发表于 12-29 17:00 1505次阅读

    PROFET™ +2 12V 演示板快速入门指南

    PROFET™ +2 12V 演示板快速入门指南 在电子设计领域,PROFET™ +2 12V 高端开关是一款备受关注的产品。今天,我们就来详细探讨一下 PROFET™ +2 12V 演示板的快速
    的头像 发表于 12-21 15:20 1039次阅读

    TLE9278BQX评估板入门指南

    TLE9278BQX评估板入门指南 在汽车电子领域,评估板对于快速验证和开发新的解决方案至关重要。今天我们就来深入了解一下TLE9278BQX评估板,它属于MCP + SBC家族,为汽车电源相关
    的头像 发表于 12-19 15:50 976次阅读

    从零开始:一份详细的灌封胶新手入门指南,告别常见操作误区 | 铬锐特实业

    针对新手的灌封胶完整入门指南,从类型选择、配比搅拌、真空脱泡到灌封固化全流程详解,帮助你避开常见操作误区,轻松掌握电子元器件防护技巧。 | 铬锐特官网
    的头像 发表于 12-17 00:31 777次阅读
    从零开始:一份详细的灌封胶新手<b class='flag-5'>入门</b><b class='flag-5'>指南</b>,告别常见操作误区 | 铬锐特实业

    电池连接器气密性检测仪操作入门指南-岳信仪器

    电池连接器的气密性对于电池的性能和安全性至关重要,而电池连接器气密性检测仪能有效检测其气密性。下面为大家带来该检测仪的操作入门指南。检测前准备在开启电池连接器气密性检测仪前,要确保它放置在平稳
    的头像 发表于 09-26 11:29 648次阅读
    电池连接器气密性检测仪操作<b class='flag-5'>入门</b><b class='flag-5'>指南</b>-岳信仪器

    FLASH模拟EEPROM入门指南

    以下是一份基于多款芯片实践总结出的 FLASH模拟EEPROM入门指南,涵盖核心概念、关键步骤及实用技巧: 一、基本概念与原理 背景动机 需求驱动:许多MCU(如AT32)未集成原生EEPROM
    发表于 08-14 06:13

    入门到精通:电商API的全栈开发指南

    在当今电商蓬勃发展的时代,API(应用程序编程接口)作为系统间的“桥梁”,已成为构建高效、可扩展电商平台的核心。全栈开发涉及从前端用户界面到后端服务器、数据库的完整流程,本指南将带你从零基础逐步掌握
    的头像 发表于 07-23 15:55 1540次阅读
    <b class='flag-5'>入门</b>到精通:电商API的全栈开发<b class='flag-5'>指南</b>

    在树莓派5上使用YOLO进行物体和动物识别-入门指南

    大家好,接下来会为大家开一个树莓派5和YOLO的专题。内容包括四个部分:在树莓派5上使用YOLO进行物体和动物识别-入门指南在树莓派5上开启YOLO人体姿态估计识别之旅YOLO物体检测在树莓派
    的头像 发表于 07-17 17:16 2320次阅读
    在树莓派5上使用YOLO进行物体和动物识别-<b class='flag-5'>入门</b><b class='flag-5'>指南</b>

    嵌入式开发入门指南:从零开始学习嵌入式

    随着物联网、智能硬件的发展,嵌入式开发成为热门技能之一。以下将为初学者提供一份详细的嵌入式开发入门指南,涵盖学习路径、必备工具、推荐资源等内容。 1. 嵌入式系统的定义与应用嵌入式系统是指用于执行
    发表于 05-15 09:29