AutomaticCameraControl
GoPro WiFi control
Introduction
Lua Script
The following Lua Script enables WiFi control of your GoPro camera.
Customization
You will need to edit the following fields at the minimum, located at the top of the script
Required
- GoPro WiFi password: Specify the WiFi password used for the GoPro WiFi adapter
- GoPro SSID: Specify the GoPro WiFi network name (SSID)
Optional
- Start trigger Speed: Change this if you want it different from the default start trigger.
- Stop trigger Speed: Change this if you want it different from the default stop trigger. Ensure this is less than the start trigger
--Specify your GoPro wifi password here
goproPwd='12345678'
--Specify your GoPro SSID here
goproSsid = 'aslhero1'
--Speed threshold to start recording
goproStart = 10
--Speed threshold to stop recording
goproStop = 5
--How fast we check, in Hz
tickRate = 10
--Set this to 1 to log communications between RCP & WiFi
debug = 0
-----------------------------
--DO NOT EDIT BELOW
-----------------------------
--the serial port where the WiFi is connected
port = 4
--indicates wifiStatus
--0 = not init, 1 = init sent, 2 = got IP, 3 = ready
wifiStatus = 0
lastInitTime = 0
initTimeout = 20000
function logMsg(msg)
println('[GoProWiFi] ' ..msg)
end
function sendCrlf()
writeCSer(port, 13)
writeCSer(port, 10)
end
function sendRaw(val)
for i=1, #val do
local c = string.sub(val, i, i)
writeCSer(port, string.byte(c))
end
end
function sendAt(val)
if debug == 1 then logMsg('send: ' ..val) end
sendRaw(val)
sendCrlf()
end
function toInt(val)
return string.sub(val, 1, -3)
end
function httpGet(url)
sendAt('AT+CIPSTART="TCP","10.5.5.9",80')
sleep(500)
local crlf = string.char(13) ..string.char(10)
local get = 'GET ' ..url ..' HTTP/1.0' ..crlf ..crlf
sendAt('AT+CIPSEND=' ..toInt(#get))
sleep(100)
sendRaw(get)
sleep(100)
sendAt("AT+CIPCLOSE")
end
function sendGoProShutter(cmd)
httpGet('/bacpac/SH?t=' ..goproPwd ..'&p=%' ..cmd)
end
function startGoPro()
logMsg('start GoPro')
sendGoProShutter('01')
end
function stopGoPro()
logMsg('stop GoPro')
sendGoProShutter('00')
end
recording = 0
function initWiFi()
logMsg('initializing')
sendAt('AT+RST')
sleep(2000)
sendAt('AT+CWMODE_CUR=1')
sleep(1000)
sendAt('AT+CWJAP_CUR="' ..goproSsid ..'","' ..goproPwd ..'"')
wifiStatus = 1
end
function processIncoming()
local line = readSer(port, 100)
if line ~= '' and debug == 1 then print(line) end
if string.match(line, 'WIFI GOT IP') then
wifiStatus = 2
end
if wifiStatus == 2 and string.match(line, 'OK') then
wifiStatus = 3
logMsg('ready for GoPro')
end
end
function checkGoPro()
if wifiStatus == 0 then
initWiFi()
lastInitTime = getUptime()
return
end
if wifiStatus == 1 and getUptime() > lastInitTime + initTimeout then
logMsg('could not connect to GoPro')
wifiStatus = 0
end
processIncoming()
if wifiStatus ~= 3 then
return
end
trigger = getGpsSpeed()
if recording == 0 and trigger > goproStart then
startGoPro()
recording = 1
end
if recording == 1 and trigger < goproStop then
stopGoPro()
recording = 0
end
end
function onTick()
checkGoPro()
end
setTickRate(tickRate)
