Mục lục:

Bộ điều khiển chuyển tiếp Alexa Raspberry Pi: 6 bước
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi: 6 bước

Video: Bộ điều khiển chuyển tiếp Alexa Raspberry Pi: 6 bước

Video: Bộ điều khiển chuyển tiếp Alexa Raspberry Pi: 6 bước
Video: Raspberry Pi: Điều khiển GPIO dạng Output 2024, Tháng bảy
Anonim
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi
Bộ điều khiển chuyển tiếp Alexa Raspberry Pi

Tôi đã tạo có thể hướng dẫn này để chia sẻ kinh nghiệm của mình với việc tích hợp các thiết bị IOT với Alexa của Amazon.

Dự án này cho phép một bảng chuyển tiếp kết nối với pi raspberry được điều khiển từ bộ điều khiển smarthome.

Nó đã được thử nghiệm với Alexa nhưng cũng có vẻ hoạt động tốt với Samsung Smartthings và các giao diện điều khiển khác vì nó mô phỏng một loạt các ổ cắm Belkin Wemo.

Có RẤT NHIỀU ví dụ dựa trên mã FAUXMO tuyệt vời nhưng điều này có nghĩa là học python và không cung cấp cho tôi điều khiển chi tiết mà tôi cần cho thiết bị của mình và vì vậy tôi quyết định tạo lại một từ đầu bằng cách sử dụng C làm ngôn ngữ mã hóa cơ sở của mình.

Tôi cũng không muốn phải đi sâu vào mã lambda trên Amazon.com vì vậy tôi đã giữ nó thực sự đơn giản.

Tôi đã đăng nguồn và ghi chú trên Github:

github.com/Switchdoctorstu/StuPiMo

Hướng dẫn thực sự là để trình bày cách làm cho nó hoạt động và xuất bản các ghi chú của tôi trong trường hợp nó giúp ích cho người khác.

Bước 1: Nguồn cung cấp và kết nối

Nguồn cung cấp và kết nối
Nguồn cung cấp và kết nối
Nguồn cung cấp và kết nối
Nguồn cung cấp và kết nối
Nguồn cung cấp và kết nối
Nguồn cung cấp và kết nối

Những thứ bạn cần đều có sẵn trên Amazon / EBay:

  • Raspberry PI *
  • Nguồn cung cấp Pi
  • Đầu nối Dupont
  • Bảng tiếp sức
  • Dây dẫn micro USB cũ (cắt một nửa để cấp nguồn cho thẻ tiếp điện)

Bất kỳ raspberry Pi nào cũng sẽ hoạt động, tôi đã thử nghiệm điều này trên Model B và Zero.

* Nếu sử dụng Pi Zero, bạn sẽ cần Bộ điều hợp mạng OTG (trừ khi bạn mua phiên bản 'W' với buit trong WiFi)

Bạn sẽ cần kết nối Pi với mạng.

Sử dụng các kết nối dupont để kết nối thẻ chuyển tiếp với Pi.

Lưu ý rằng thẻ tiếp điện nên sử dụng nguồn ngoài (tháo liên kết và kết nối với 5v bên ngoài). Nó sẽ hoạt động được cấp nguồn từ PI nhưng nó không được khuyên dùng để chạy sản xuất.

Đối với thiết lập của tôi, tôi đã sử dụng HUB USB được cấp nguồn bên ngoài. Điều này cung cấp năng lượng cho PI.

Tôi cũng cắt đầu cáp USB cũ và cấp nguồn cho các rơ le từ kết nối USB thứ hai đến trung tâm để giữ an toàn. Phiên bản 'sản xuất' của tôi sử dụng nguồn điện chuyển đổi chế độ 5V 5A nhỏ. Một lần nữa, tôi chỉ cần cắt một nửa dây dẫn USB để cấp nguồn cho Pi qua Micro-USB và cắt bớt hai trong số các đầu nối kém để cấp nguồn cho bảng tiếp điện. Có 4 dây trong dây dẫn USB, hầu hết sử dụng màu đỏ / đen để biểu thị nguồn cung cấp 5v nhưng nếu nghi ngờ, hãy sử dụng đồng hồ đo để đảm bảo bạn nhận đúng dây.

Các chân tiếp điện trên bo mạch được kết nối với các chân GPIO có liên quan trên tiêu đề PI.

Mã cho phép bạn chọn các chân GPIO nhưng mặc định tôi đã sử dụng là:

  1. Rơ le Pin 1 - Nối đất
  2. Chân tiếp sóng 2 - Rơ le 1 - GPIO 0
  3. Chân tiếp sóng 3 - Rơ le 2 - GPIO 1
  4. Chân tiếp điện 4 - Rơ le 3 - GPIO 2
  5. Chân tiếp điện 5 - Rơ le 4 - GPIO 3
  6. Chân tiếp điện 6 - Rơ le 5 - GPIO 4
  7. Chân tiếp điện 7 - Rơ le 6 - GPIO 5
  8. Chân tiếp điện 8 - Rơ le 7 - GPIO 6
  9. Chân tiếp điện 9 - Rơ le 8 - GPIO 7
  10. Rơ le Pin 10 - + 5v cho logic

Bước 2: Thiết lập PI

Tôi sẽ không tạo lại một hướng dẫn về cách thiết lập và chạy PI của bạn và kết nối với mạng.

Có rất nhiều hướng dẫn bao gồm một hướng dẫn tuyệt vời tại:

www.instructables.com/id/Ultim-Raspberr…

Bạn sẽ cần phải đưa mình đến điểm mà PI hiển thị trên mạng và bạn có thể kết nối với nó.

Nó không quan trọng cho dù điều này là qua Ethernet hay không dây.

Dự án này có thể được hoàn thành chỉ với Raspberry PI bằng Geany Programmers Editor nhưng cá nhân tôi thấy việc chuẩn bị mã của mình trên PC bằng Visual Studio hoặc Eclipse (hoặc thậm chí Notepad ++) dễ dàng hơn và sau đó tải nó lên PI để gỡ lỗi bằng cách sử dụng Kết nối VNC. Một lần nữa, tôi sẽ không trình bày điều đó ở đây vì có rất nhiều hướng dẫn tuyệt vời về cách thiết lập VNC trên RPi.

Tất cả những gì bạn cần là đến điểm mà bạn có thể tải lên và biên dịch mã.

Một lưu ý quan trọng là vì trình xử lý UPNP yêu cầu phát đa hướng UDP, các giao diện được sử dụng phải được đặt ở chế độ 'Promiscuous'.

Điều này có thể được thực hiện trên dòng lệnh:

pi @ raspberrypi: ~ $ ifconfig eth0 khuyến mãi

và / hoặc

pi @ raspberrypi: ~ $ ifconfig wlan0 khuyến mãi

Điều này cần được thực hiện vĩnh viễn vì vậy tôi đã chỉnh sửa /etc/rc.local

sudo nano / etc / rc.local

để bao gồm dòng:

sudo ifconfig eth0 promisc

sau tập hợp # dòng biểu ngữ đầu tiên để đảm bảo rằng các giao diện đã được thiết lập khi khởi động.

Bước 3: Tải xuống và biên dịch mã

Bản thân mã nằm trong kho lưu trữ Github của tôi;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

trong khi có những cách 'chính xác' để sao chép kho lưu trữ. Tôi thấy dễ dàng hơn chỉ cần mở trình chỉnh sửa Geany trên máy tính để bàn Pi và dán mã vào.

Tương tự, nếu bạn đang sử dụng dòng lệnh;

Tạo một thư mục mới

mkdir Stu

Thay đổi nó

cd Stu

Tạo một tệp văn bản mới

nano StuPiMo.c

Sao chép mã từ Github thô và dán vào tệp mới

Lưu và thoát.

Khi bạn có tệp dưới dạng đối tượng mã nguồn C, bạn có thể biên dịch nó bằng cách sử dụng

gcc -o StuPiMo StuPiMo.c -l wiringPi

lưu ý rằng "-l wiringPi" là cần thiết để đảm bảo rằng trình khiếu nại liên kết trong thư viện wiringPi bắt buộc.

Sau đó, mã có thể được chạy bằng cách sử dụng

./StuPiMo

Một lần nữa, nếu bạn muốn điều này chạy khi khởi động, hãy sử dụng lệnh:

sudo nano /etc/rc.local

để thêm dòng sau

sudo / home / pi / Stu / StuPiMo &

vào tệp /etc/rc.local của bạn. Đừng quên lưu tệp của bạn khi thoát.

Lưu ý rằng '&' là điều cần thiết để đảm bảo rằng một quy trình phụ được tạo ra để đảm bảo rằng tập lệnh không bị chặn tại thời điểm này.

Bước 4: Sử dụng nó

Khi bạn đã chạy mã, hãy yêu cầu alexa 'Khám phá thiết bị' và cô ấy sẽ tìm thấy tất cả 8 thiết bị Wemo ảo.

Sau đó, nó chỉ là một trường hợp nói: "Alexa bật ổ cắm 1" hoặc "Alexa tắt ổ cắm 6", v.v. và rơle liên quan sẽ được thay đổi.

Bước 5: Cách hoạt động của mã

Mã hoạt động bằng cách mô phỏng một loạt thiết bị ổ cắm Belkin Wemo.

Để đạt được điều này, nó phải xử lý 2 chức năng chính

  • trình xử lý chương trình phát sóng khám phá UPNP
  • một 'trình xử lý thiết bị' (một trình xử lý trên mỗi thiết bị ảo) để quản lý các lệnh được gửi đến thiết bị và các phản hồi cần thiết.

Một tính năng 'tiền thưởng' là nó cũng xuất bản một trang web để cho phép thiết bị.

Trình xử lý UPNP

Trình xử lý UPNP mở một ổ cắm để giám sát các gói giao thức SSDP trên cổng 239.255.255.250 1900.

Nó phản hồi bất kỳ truy vấn 'M-SEARCH' nào đến với một gói phản hồi khám phá thông báo các trình giả lập wemo riêng lẻ cho bất kỳ ai hỏi.

Trình xử lý thiết bị

Các trình xử lý thiết bị (một trên mỗi thiết bị ảo) giám sát một loạt các cổng IP và phản hồi các yêu cầu.

Nó sẽ cung cấp phản hồi setup.xml khi được hỏi

Nó sẽ cung cấp tệp mô tả sự kiện khi được hỏi

Nó sẽ phản hồi yêu cầu GETBINARYSTATE

Nó sẽ xử lý và phản hồi yêu cầu SETBINARYSTATE

Máy chủ web

Máy chủ web là một quy trình đơn giản tạo một biểu mẫu HTML có chứa một nút cho mỗi lần chuyển tiếp.

Nó sẽ phản hồi các nút được nhấn và chuyển đổi trạng thái của rơle tương ứng.

Bước 6: Tùy chỉnh và tên thân thiện

Tùy chỉnh và tên thân thiện
Tùy chỉnh và tên thân thiện

Tôi đã không phát điên với mã để giữ cho nó đơn giản và có thể chỉnh sửa.

Những điều cơ bản có thể được tùy chỉnh bằng các định nghĩa ở đầu mã:

// định nghĩa chung # xác định WEBPORT 5353 // cổng để chạy máy chủ web trên

#define NUMDEVICES 8 // Số lượng thiết bị ảo cần tạo

#define PORTBASE 43450 // cổng IP cơ sở để tăng lên từ

WEBPORT là số cổng mà máy chủ web tích hợp sẵn chạy trên đó. Điều này có thể được thực hiện ở mức 80 để làm cho mọi thứ dễ dàng nhưng tôi thấy rằng nó xung đột với tomcat hoặc các dịch vụ khác đang chạy cục bộ.

NUMDEVICES xác định số lượng trình giả lập WEMO riêng lẻ sẽ khởi chạy. Nếu bạn có thẻ chuyển tiếp 2 cổng thì hãy đặt giá trị này thành 2, 4 cổng = 4, v.v.

Tên thân thiện cho các thiết bị được đặt theo quy trình gọi là setup_names:

int setup_names (char thân thiện [NUMDEVICES] [NAMELEN]) {int i = 0;

// sử dụng vòng lặp này

for (i = 0; i <NUMDEVICES; i ++) {

sprintf (thân thiện , "Socket% d", i + 1);

}

// hoặc bảng thủ công sau để điền tên thiết bị

/*

strcpy (thân thiện [0], "TV phòng ngủ");

strcpy (thân thiện [1], "Chăn điện");

strcpy (thân thiện [2], "Đèn ngủ");

strcpy (thân thiện [3], "Socket 4");

strcpy (thân thiện [4], "Socket 5");

strcpy (thân thiện [5], "Socket 6");

strcpy (thân thiện [6], "Socket 7");

strcpy (thân thiện [7], "Socket 8");

*/

trả lại tôi;

}

Tôi đã sử dụng một vòng lặp để gọi từng thiết bị là 'Socket n' nhưng bạn có thể xóa vòng lặp này và thêm tên thân thiện của riêng mình thay vào đó (chỉ cần đảm bảo rằng bạn thêm cùng một số với NUMDEVICES) nếu bạn xóa / * * /

Hãy nhớ biên dịch lại mã nếu bạn thực hiện bất kỳ thay đổi nào.

Đề xuất: