树莓派for Mac 启动

树莓派for Mac 启动

开始第一篇啦,拿到树莓派还是好开心的说~先开始启动吧

目录

实验目的

  1. 了解嵌入式板卡一般情况;
  2. 熟悉pcDuino的供电等接线方式;
  3. 复习Linux启动过程(操作系统课);
  4. 复习通过Linux获得硬件数据(操作系统课)
  5. 熟练掌握串口在PC上的使用;
  6. 熟练掌握Linux的以太网和WiFi配置;
  7. 熟练掌握Linux的SSH配置;
  8. 熟练掌握PC上的SSH软件。
  9. 掌握嵌入式板卡和PC建立文件共享的方式;
  10. 寻找和安装交叉编译环境,理解交叉编译;
  11. 熟悉嵌入式板卡的Linux下的编程环境;
  12. 了解远程访问嵌入式板卡图形桌面的方式。

实验器材

硬件
1. 实验主板一块(树莓派);
2. 5V/1A电源一个(手机充电器);
3. microUSB线一根;
4. USB-TTL串口线一根(PL2303芯片)。
5. Mac OS一台;
6. 以太网线一根、路由器;

软件
1. PC上的USB-TTL串口线配套的驱动程序;
2. PC上的串口终端软件minicom;
3. PC上的SSH软件(mac自带)。
4. 交叉编译软件。


samba和ssh

  • SSH登陆树莓派ssh pi@"你的ip地址"
  • 配置嵌入式板卡上的SAMBA客户端将文件夹设为共享
    设置pc上的目录
  • 通过mount命令将共享文件夹挂载到/mnt下sudo mount.cifs //192.168.1.10/ras-mac/mnt - o rw,username=vkch,nounix,sec=ntlmssp
  • 配置嵌入式板卡上的SAMBA服务端,安装SAMBAsudo apt-get install samba
  • 修改配置文件sudo vi /etc/samba/smb.conf
comment = Public Storage
path = /home/pi
read only = no#任何人都具有了访问修改的权限
#因为是公共文件夹,所以给了所有用户全部权限,可以自定义
create mask = 0777#新创建文件的默认属性
directory mask = 0777#新创建文件夹的默认属性
guest ok = yes#默认的访问用户名为guest

编译环境

  • 下载ARM GNU Linux编译工具链ARMx-2009q3-67.tar.bz2
  • 新建磁盘映像 由于mac默认对大小写不敏感,所以要新建一个大小写敏感的磁盘映像。(这是已经解压了编译工具的新建磁盘)
  • 解压工具链到磁盘映像tar -zx -C /Volumes/arm-x\ Image --strip-components 1 -f ARMx-2009q3-67.tar.bz2
  • 编译文件
    这里写图片描述

传输文件

  • 利用串口XModem协议传递
  • minicom登陆开发板
  • Ctrl+A,之后按S打开upload对话框
  • 选择Xmode后,选择所要传送的文件,空格选中,后选择OK
    这里写图片描述
  • 利用scp上传。输入 sudo scp float pi@192.168.1.7:~/home
    这里写图片描述

  • 利用sftp上传。输入sudo sftp pi@192.168.1.105打开sftp服务器
    这里写图片描述


错误

  1. 在上电后,经过一段启动程序到输入用户名阶段,发现键盘无法输入任何字符。

    解决方案:
    minicom中配置出现问题,将Hardware Flow Control改为NO

  2. 利用公钥ssh登陆时,显示permission denied

    解决方案:
    没有将公钥( publickey ) 添加到本地 ssh 环境造成的,或者是由于多日未 进行ssh 登录操作,本地 publickey 失效造成的。
    ssh-add your_ publicly

  3. 使用minicom时发现串口被锁定。Device /dev/ttyS0 is locked.

    解决方案:
    1、可以考虑关机重启=。=
    2、查看/tmp目录,看看有没有和lock相关的,有删除既可以。

该系统的功能还可以进一步完善,例如: 1. 增加人脸识别功能,可以通过摄像头识别家庭成员的面部特征,实现个性化定制服务; 2. 增加智能推荐功能,例如根据用户的日常习惯和喜好,推荐适合的音乐、电影等娱乐内容; 3. 增加智能家居安防功能,例如检测家庭门窗是否关闭等,提高家庭安全性。 以下是该系统的实现步骤及代码: 1. 硬件连接 将免驱麦克风和音响连接至树莓派的音频接口,将SIM800C模块连接至树莓派的USB串口。 2. 百度API语音识别与语音合成 使用百度API实现语音识别和语音合成功能,具体步骤如下: (1)注册百度API账号并创建应用; (2)在树莓派上安装Python SDK,并在代码中引入SDK; (3)通过SDK实现语音识别和语音合成功能。 以下是Python代码示例: ```python import sys import time import urllib.request import urllib.parse import json import base64 import os # 百度API配置 API_KEY = 'your_api_key' SECRET_KEY = 'your_secret_key' API_URL = 'http://vop.baidu.com/server_api' TTS_URL = 'http://tsn.baidu.com/text2audio' # 读取音频文件 def get_file_content(file_path): with open(file_path, 'rb') as f: return f.read() # 语音识别 def voice_recognition(file_path): data = get_file_content(file_path) speech_length = len(data) speech = base64.b64encode(data).decode('utf-8') mac_address = '00-16-3e-0f-11-74' params = { 'format': 'wav', 'rate': '16000', 'channel': 1, 'cuid': mac_address, 'token': get_token(), 'lan': 'zh', 'len': speech_length, 'speech': speech } headers = { 'Content-Type': 'application/json', } params_str = json.dumps(params) req = urllib.request.Request(url=API_URL, data=params_str.encode('utf-8'), headers=headers, method='POST') response = urllib.request.urlopen(req) result_str = response.read().decode('utf-8') result = json.loads(result_str) if 'result' in result: return result['result'][0] else: return '' # 语音合成 def text_to_speech(text, file_path): params = { 'tex': text, 'lan': 'zh', 'cuid': 'baidu_workshop', 'ctp': 1, 'tok': get_token() } params_str = urllib.parse.urlencode(params) url = TTS_URL + '?' + params_str os.system('wget "%s" -O %s' % (url, file_path)) # 获取百度API的token def get_token(): params = { 'grant_type': 'client_credentials', 'client_id': API_KEY, 'client_secret': SECRET_KEY } params_str = urllib.parse.urlencode(params) url = 'https://openapi.baidu.com/oauth/2.0/token?' + params_str response = urllib.request.urlopen(url) result_str = response.read().decode('utf-8') result = json.loads(result_str) return result['access_token'] ``` 3. 图灵聊天机器人 使用图灵API实现聊天机器人功能,具体步骤如下: (1)注册图灵API账号并创建机器人; (2)在树莓派上安装Python SDK,并在代码中引入SDK; (3)通过SDK实现聊天机器人功能。 以下是Python代码示例: ```python import requests import json # 图灵API配置 API_KEY = 'your_api_key' API_URL = 'http://openapi.tuling123.com/openapi/api/v2' # 图灵聊天机器人 def turing_chat(message): req = { "reqType": 0, "perception": { "inputText": { "text": message } }, "userInfo": { "apiKey": API_KEY, "userId": "123456" } } req_str = json.dumps(req) headers = {'content-type': 'application/json'} response = requests.post(API_URL, data=req_str, headers=headers) result = json.loads(response.text) if 'results' in result: for i in result['results']: if i['resultType'] == 'text': return i['values']['text'] return '' ``` 4. 系统控制 根据用户的语音指令,实现家电控制和紧急呼叫功能。具体步骤如下: (1)将用户的语音指令转化为文字,通过正则表达式匹配出用户的控制指令; (2)根据用户的控制指令,通过HA实现家电控制; (3)当系统检测到紧急呼叫的关键词时,触发SIM800C模块进行紧急呼叫和短信求救。 以下是Python代码示例: ```python import re import subprocess # 正则表达式匹配控制指令 def match_control_command(command): pattern = re.compile(r'(打开|关闭)(.*)') m = pattern.match(command) if m: action = m.group(1) device = m.group(2) return action, device return None, None # HA家电控制 def control_home_appliance(action, device): if action == '打开': subprocess.call(['curl', '-X', 'POST', '-H', 'Content-Type: application/json', '-d', '{"entity_id": "switch.' + device + '_switch"}', 'http://your_ha_ip:8123/api/services/switch/turn_on?api_password=your_ha_password']) elif action == '关闭': subprocess.call(['curl', '-X', 'POST', '-H', 'Content-Type: application/json', '-d', '{"entity_id": "switch.' + device + '_switch"}', 'http://your_ha_ip:8123/api/services/switch/turn_off?api_password=your_ha_password']) # 紧急呼叫 def emergency_call(): subprocess.call(['sudo', 'python', 'send_sms.py', 'your_phone_number', '紧急呼叫:请尽快前往家中处理!']) subprocess.call(['sudo', 'python', 'make_call.py', 'your_phone_number']) ``` 5. 系统唤醒和语音聊天 使用Snowboy实现系统的唤醒功能,使用PyAudio实现语音聊天功能。具体步骤如下: (1)在树莓派上安装Snowboy和PyAudio; (2)通过Snowboy实现系统的唤醒功能; (3)当系统唤醒时,使用PyAudio录制用户的语音,并调用百度API实现语音识别,获得用户的语音指令; (4)根据用户的语音指令,实现家电控制和聊天机器人功能。 以下是Python代码示例: ```python import snowboydecoder import pyaudio import wave import os import time import threading from voice_recognition import voice_recognition from text_to_speech import text_to_speech from turing_chat import turing_chat from control_home_appliance import match_control_command, control_home_appliance, emergency_call # Snowboy唤醒配置 MODEL = 'your_model.pmdl' SENSITIVITY = 0.5 # PyAudio录音配置 CHUNKSIZE = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = 'temp.wav' # 系统唤醒 def system_wakeup(): print('Wake up') text_to_speech('网络成功连接,您现在处于在线模式,可以使用在线功能', 'wakeup.mp3') os.system('mpg321 wakeup.mp3') os.system('rm wakeup.mp3') while True: # 录音 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNKSIZE) frames = [] for i in range(0, int(RATE / CHUNKSIZE * RECORD_SECONDS)): data = stream.read(CHUNKSIZE) frames.append(data) stream.stop_stream() stream.close() p.terminate() # 保存音频文件 wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() # 语音识别 command = voice_recognition(WAVE_OUTPUT_FILENAME) print('You said: ' + command) # 控制家电 action, device = match_control_command(command) if action and device: control_home_appliance(action, device) elif '救命' in command or '紧急呼叫' in command: emergency_call() # 聊天机器人 else: response = turing_chat(command) text_to_speech(response, 'response.mp3') os.system('mpg321 response.mp3') os.system('rm response.mp3') # Snowboy唤醒线程 def wakeup_thread(): detector = snowboydecoder.HotwordDetector(MODEL, sensitivity=SENSITIVITY) detector.start(detected_callback=system_wakeup, sleep_time=0.03) detector.terminate() # 启动系统 def start_system(): print('Start system') # 判断网络状态 if os.system('ping www.baidu.com -c 1') == 0: threading.Thread(target=wakeup_thread).start() else: text_to_speech('网络未连接,您现在处于离线模式,只能实现离线功能', 'offline.mp3') os.system('mpg321 offline.mp3') os.system('rm offline.mp3') if __name__ == '__main__': start_system() ``` 以上是基于语音交互的智能家居系统的实现步骤和代码,具体实现过程中还需要根据实际情况进行调试和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值